
#ifndef COM_STRUCT_H
#define COM_STRUCT_H

/////////////////////////////////////////////////////////////////////////////
// 更新记录
// 2018-12-29 - V3.0.0 16 组接入
// 2019-04-17 - V3.1.0 增加充满放空释放条件（单体电压）
// 2019-05-09 - V3.2.0 增加均衡使能标志
// 2019-06-12 - V3.3.0 增加BA的DIDO,充放电次数,Ah
// 2019-09-16 - V3.4.0 增加BA IO 采集可配置、对BCMU、BMU的升级
// 2019-09-16 - V3.4.1 增加支路状态的独立计算
// 2019-09-16 - V3.4.2 增加禁充 禁放、状态释放电量、单体温度分禁充禁放,运行状态原因
// 2019-09-16 - V3.4.3 增加BC断开接触器记录
// 2020-02-26 - V3.4.4 增加 Web 升级 和 监控
// 2020-03-07 - V3.4.5 增加 故障灯 的独立控制(常开)
// 2020-03-11 - V3.4.6 增加 熔丝 汇流开关 配置
// 2020-04-01 - V3.4.6 增加命令的宏定义(版本保持)
// 2020-04-15 - V3.4.7 增加 总正、总负、预充接触器粘连告警(30秒)、完善 汇流开关 策略
// 2020-05-26 - V3.4.8 禁充禁放释放按累计电量计算、 降功率值恢复需要释放一定的电量
// 2020-06-04 - V3.4.9 并联汇入时,充满发给每台BC
// 2020-07-17 - V3.4.10 动力线温度处理、直流侧汇入方式:多组汇入、运行模式、降功率末端条件可配、主界面绝缘显示、汇流开关控制、增加电池堆功率、电池组功率
// 2020-11-21 - V3.4.11 计算Ah（保存数据库、modbus点表保持不变）、BA 重启主动断开接触器,检查接触器粘连情况、BC 重启日志记录、运行灯、SOC校准系数
// 2020-12-14 - V3.4.12 增加紧急停机
// 2021-01-25 - V3.4.13 增加预充时间（可配、默认10秒）
// 2021-03-15 - V3.4.14 增加应急模式、扩展干接点、霍尔异常、环境温度
// 2021-03-22 - V3.4.15 增加调试模式、电压过滤、扩展IO设备通讯故障
// 2021-05-09 - V3.4.16 增加BC对时功能(每小时对时一次)
// 2021-05-09 - V3.4.17 增加风机故障状态、BMU通讯故障位置、熔丝故障测点
// 2022-03-15 - V3.5.0  单体增加到 600
// 2022-03-22 - V3.5.1  增加接触器无法闭合故障、增加转发模式、 累加电量需要使用double
// 2022-03-22 - V3.5.2  增加单体数据显示策略 CellDataStrategy=0 在misce.ini中 
// 2022-07-15 - V3.6.0  增加支路动态分配、 RTDB版本核验、 增加其他程序版本界面显示、增加预充失败告警、增加组压采集差告警、调整测点表
// 2022-07-15 - V3.6.1  广播包中增加BC、BMU版本（0为无效版本）读取BC、BMU版本信息 增加模组电压以及告警处理
// 2022-09-17 - V3.6.2  修改风机启停温度设置
// 2022-12-13 - V3.7.0  界面整理、消防水浸汇总、EMS及PCS通讯故障判断、空调温湿度区域
// 2023-05-31 - V3.8.0  BMS新国标调整 

#include <QObject>
#include <QDateTime>

/////////////////////////////////////////////////////////////////////////////
//版本信息
#define BAMS_VERSION_MAJOR                                3
#define BAMS_VERSION_MINOR                   	          8
#define BAMS_VERSION_REVISION                             0
#define BAMS_VERSION_TEXT                                 "3.8.0"

// define 
#define MESSAGE_TIP_SECONDS                               3        // 消息提示 3 秒
#define DATA_BUFFER_LENGHT                                512      // Modbus RTU
#define SNED_BUFFER_LENGHT                                1024   
#define RECE_BUFFER_LENGHT                                1024
#define MAX_BATT_NUM                                      600
#define BANK_ALARM_MAX_NUM                                3630 + 70 + 200  // (30 + 600 * 6) + 10 空余 + 200(温差、压差、动力线) + 50箱电压
#define ALARM_LAST_NO                                     999      // 告警最后一条
#define ALARM_BANK_NO                                     999      // 组端编号
#define ALARM_INVALID_VALUE                               999      // 无效值
#define MAX_PACK_NUM                                      50       // 最大电池PACK数
#define MAX_PACK_PWR_LN_TEMP_NUM                          100      // 最大电池PACK动力线温度数
#define MAX_BANK_NUM                                      16       // 最大电池组数
#define MAX_BMU_NUM                                       40       // 最大BMU数
#define MAX_ALARM_CACHE_NUM                               512      // 最大告警缓存数	
#define CAN_MULTI_FRAME_NUM                               100      // 一次最多读100帧
#define MAX_IO_NUM                                        2        // 最大IO数
#define MAX_DI_NUM                                        16       // 最大DI数
#define MAX_DO_NUM                                        16       // 最大DO数
#define MAX_DI_NAME                                       32       // DI名称的最大长度
#define MAX_DO_NAME                                       32       // D0名称的最大长度
#define MAX_AC_NUM                                        20       // 最大空调数
#define MAX_TEMP_HUMI_NUM                                 10       // 最大温湿度数
#define MAX_TH_NUM                                        32       // 最大温湿度数
#define MAX_WATER_NUM                                     10       // 最大水浸数
#define MAX_METER_NUM                                     32       // 电表接入最多台数
#define MAX_DOOR_NUM                                      32       // 门禁接入最多台数
#define MAX_DH_NUM                                        32       // 最大除湿数
#define MAX_LC_NUM                                        32       // 最大液冷数
#define MAX_PCS_NUM                                       32       // 最大逆变器数
#define MAX_DCDC_NUM                                      32       // 最大DCDC数
#define MAX_MPPT_NUM                                      32       // 最大MPPT数
#define MAX_EC_NUM                                        32       // 最大环控数
#define MAX_FIRE_NUM                                      32       // 最大消防数
#define MAX_PV_NUM                                        32       // 最大光伏数
#define MAX_ES_NUM                                        32       // 最大急停数
#define MAX_UPS_NUM                                       32       // 最大UPS数
#define MAX_GAS_NUM                                       32       // 最大可燃气体数
#define MAX_PILE_NUM                                      32       // 最大充电桩数
#define MAX_LED_NUM                                       32       // 最大LED灯数
#define MAX_FAN_NUM                                       32       // 最大风扇数
#define MAX_STS_NUM                                       32       // 最大STS数
#define MAX_PRESS_NUM                                     32       // 最大压力传感器数
#define MAX_LEVEL_NUM                                     32       // 最大液位传感器数
#define MAX_RES1_NUM                                      32       // 预留设备1的最大数
#define MAX_RES2_NUM                                      32       // 预留设备2的最大数

#define MAX_APP_NUM                                       32       // 最大进程APP数
#define MAX_APP_NAME                                      32       // 进程APP名称的最大长度

// Log Type
#define RUN_LOG_ALL                                       0
#define RUN_LOG_OK                                        1
#define RUN_LOG_FAILED                                    2
#define RUN_LOG_RUN                                       3
#define RUN_LOG_STOP                                      4
#define RUN_LOG_MESSAGE_BA                                10
#define RUN_LOG_MESSAGE_DT                                11
#define RUN_LOG_MESSAGE_PCS                               12
#define RUN_LOG_MESSAGE_GPRS                              13
#define RUN_LOG_MESSAGE_CAN                               14
#define RUN_LOG_MESSAGE_NTP                               15
#define RUN_LOG_MESSAGE_CMD                               16
#define RUN_LOG_MESSAGE_FILE                              17

#define RUN_MESSAGE_REPLY_SELECT                          102   // 日志帅选 状态回复

// Message Log 1 - 100
#define MSG_TYPE_LOG_REGISTER                             1   // 日志注册
#define MSG_TYPE_LOG_SELECT                               2   // 日志帅选
#define MSG_TYPE_LOG_SERVER_STAT                          3   // 日志服务统计

#include "ProcessType.h"
// // Process No
// #define PROCESS_ALL                                       0
// #define PROCESS_NO_XNDACSRV                               10
// #define PROCESS_NO_XNTRANSRV                              11
// #define PROCESS_NO_XNDATAPROC                             12
// #define PROCESS_NO_XNLOGSRV                               13
// #define PROCESS_NO_XNVIEW                                 14
// #define PROCESS_NO_XNGUARD                                15
// #define PROCESS_NO_XNUPGRADE                              16
// #define PROCESS_NO_XNLOG                                  17
// #define PROCESS_NO_XNPLAT                                 18
// #define PROCESS_NO_XN104                                  19
// #define PROCESS_NO_XNREQCABISOC                           20
// #define PROCESS_NO_XNGPRSSRV                              21
// #define PROCESS_NO_XNBATEVAL                              22
// #define PROCESS_NO_XN61850                                23
// #define PROCESS_NO_XNDACASS                               24

// #define PROCESS_NO_OTHER                                  99

// System Log Type
#define SYS_LOG_TYPE_RUN                                  1         // 运行日志
#define SYS_LOG_TYPE_OPT                                  2         // 操作日志

// Alarm
#define ALARM_TYPE_UNKOWN                                 0      // 未知

#define ALARM_TYPE_BANK_VOL_UP_LIMIT_WARN                 1      // 组端电压上限预警
#define ALARM_TYPE_BANK_VOL_DOWN_LIMIT_WARN               2      // 组端电压下限预警
#define ALARM_TYPE_CHARGE_CUR_UP_LIMIT_WARN               3      // 充电电流上限预警
#define ALARM_TYPE_DISCHARGE_CUR_UP_LIMIT_WARN            4      // 放电电流上限预警
#define ALARM_TYPE_SGL_VOL_UP_LIMIT_WARN                  5      // 单体电压上限预警   
#define ALARM_TYPE_SGL_VOL_DOWN_LIMIT_WARN                6      // 单体电压下限预警 
#define ALARM_TYPE_CHG_SGL_TEMP_UP_LIMIT_WARN             7      // 充电温度上限预警 
#define ALARM_TYPE_CHG_SGL_TEMP_DOWN_LIMIT_WARN           8      // 充电温度下限预警 
#define ALARM_TYPE_DCHG_SGL_TEMP_UP_LIMIT_WARN            9      // 放电温度上限预警 
#define ALARM_TYPE_DCHG_SGL_TEMP_DOWN_LIMIT_WARN          10     // 放电温度下限预警 
#define ALARM_TYPE_SGL_TEMP_UP_LIMIT_WARN                 11     // 单体温度上限预警 
#define ALARM_TYPE_SGL_TEMP_DOWN_LIMIT_WARN               12     // 单体温度下限预警 
#define ALARM_TYPE_ENV_TEMP_UP_LIMIT_WARN                 13     // 环境温度上限预警  
#define ALARM_TYPE_ENV_TEMP_DOWN_LIMIT_WARN               14     // 环境温度下限预警 
#define ALARM_TYPE_POWER_LINE_TEMP_UP_LIMIT_WARN          15     // 动力线温度上限预警 
#define ALARM_TYPE_BANK_SOC_UP_LIMIT_WARN                 16     // 组端SOC上限预警
#define ALARM_TYPE_BANK_SOC_DOWN_LIMIT_WARN               17     // 组端SOC下限预警
#define ALARM_TYPE_POS_RES_DOWN_LIMIT_WARN                18     // 正极绝缘内阻下限预警
#define ALARM_TYPE_NEG_RES_DOWN_LIMIT_WARN                19     // 负极绝缘内阻下限预警
#define ALARM_TYPE_PACK_VOL_DIFF_UP_LIMIT_WARN            20     // 箱压差上限预警
#define ALARM_TYPE_PACK_TEMP_DIFF_UP_LIMIT_WARN           21     // 箱温差上限预警
#define ALARM_TYPE_BANK_VOL_DIFF_UP_LIMIT_WARN            22     // 组压采集差上限预警
#define ALARM_TYPE_PACK_VOL_UP_LIMIT_WARN                 23     // 箱电压上限预警
#define ALARM_TYPE_PACK_VOL_DOWN_LIMIT_WARN               24     // 箱电压下限预警
#define ALARM_TYPE_CELL_VOL_DIFF_UP_LIMIT_WARN            25     // 组内单体电压极差上限预警
#define ALARM_TYPE_CELL_TEMP_DIFF_UP_LIMIT_WARN           26     // 组内单体温度极差上限预警
#define ALARM_TYPE_MODULE_VOL_DIFF_UP_LIMIT_WARN          27     // 组内模块电压极差上限预警
#define ALARM_TYPE_HV_POWER_LINE_TEMP_UP_LIMIT_WARN       28     // 高压动力线温度上限预警 
#define ALARM_TYPE_BANK_CUR_ABNORMAL_WARN                 29     // 组电流异常预警
#define ALARM_TYPE_CELL_VOL_SUDCHG_WARN                   30     // 单体电压突变预警

#define ALARM_TYPE_RESERVE1_WARN                          45     // 保留1预警
#define ALARM_TYPE_RESERVE2_WARN                          46     // 保留2预警
#define ALARM_TYPE_RESERVE3_WARN                          47     // 保留3预警
#define ALARM_TYPE_RESERVE4_WARN                          48     // 保留4预警
#define ALARM_TYPE_RESERVE5_WARN                          49     // 保留5预警
#define ALARM_TYPE_RESERVE6_WARN                          50     // 保留6预警

#define ALARM_TYPE_BANK_VOL_UP_LIMIT_ALARM                51      // 组端电压上限告警
#define ALARM_TYPE_BANK_VOL_DOWN_LIMIT_ALARM              52      // 组端电压下限告警
#define ALARM_TYPE_CHARGE_CUR_UP_LIMIT_ALARM              53      // 充电电流上限告警
#define ALARM_TYPE_DISCHARGE_CUR_UP_LIMIT_ALARM           54      // 放电电流上限告警
#define ALARM_TYPE_SGL_VOL_UP_LIMIT_ALARM                 55      // 单体电压上限告警   
#define ALARM_TYPE_SGL_VOL_DOWN_LIMIT_ALARM               56      // 单体电压下限告警 
#define ALARM_TYPE_CHG_SGL_TEMP_UP_LIMIT_ALARM            57      // 充电温度上限告警 
#define ALARM_TYPE_CHG_SGL_TEMP_DOWN_LIMIT_ALARM          58      // 充电温度下限告警 
#define ALARM_TYPE_DCHG_SGL_TEMP_UP_LIMIT_ALARM           59      // 放电温度上限告警 
#define ALARM_TYPE_DCHG_SGL_TEMP_DOWN_LIMIT_ALARM         60      // 放电温度下限告警 
#define ALARM_TYPE_SGL_TEMP_UP_LIMIT_ALARM                61      // 单体温度上限告警 
#define ALARM_TYPE_SGL_TEMP_DOWN_LIMIT_ALARM              62      // 单体温度下限告警 
#define ALARM_TYPE_ENV_TEMP_UP_LIMIT_ALARM                63      // 环境温度上限告警  
#define ALARM_TYPE_ENV_TEMP_DOWN_LIMIT_ALARM              64      // 环境温度下限告警 
#define ALARM_TYPE_POWER_LINE_TEMP_UP_LIMIT_ALARM         65      // 动力线温度上限告警 
#define ALARM_TYPE_BANK_SOC_UP_LIMIT_ALARM                66      // 组端SOC上限告警
#define ALARM_TYPE_BANK_SOC_DOWN_LIMIT_ALARM              67      // 组端SOC下限告警
#define ALARM_TYPE_POS_RES_DOWN_LIMIT_ALARM               68      // 正极绝缘内阻下限告警
#define ALARM_TYPE_NEG_RES_DOWN_LIMIT_ALARM               69      // 负极绝缘内阻下限告警
#define ALARM_TYPE_PACK_VOL_DIFF_UP_LIMIT_ALARM           70      // 箱压差上限告警
#define ALARM_TYPE_PACK_TEMP_DIFF_UP_LIMIT_ALARM          71      // 箱温差上限告警
#define ALARM_TYPE_BANK_VOL_DIFF_UP_LIMIT_ALARM           72      // 组压采集差上限告警
#define ALARM_TYPE_PACK_VOL_UP_LIMIT_ALARM                73      // 箱电压上限告警
#define ALARM_TYPE_PACK_VOL_DOWN_LIMIT_ALARM              74      // 箱电压下限告警
#define ALARM_TYPE_CELL_VOL_DIFF_UP_LIMIT_ALARM           75      // 组内单体电压极差上限告警
#define ALARM_TYPE_CELL_TEMP_DIFF_UP_LIMIT_ALARM          76      // 组内单体温度极差上限告警
#define ALARM_TYPE_MODULE_VOL_DIFF_UP_LIMIT_ALARM         77      // 组内模块电压极差上限告警
#define ALARM_TYPE_HV_POWER_LINE_TEMP_UP_LIMIT_ALARM      78      // 高压动力线温度上限告警 
#define ALARM_TYPE_BANK_CUR_ABNORMAL_ALARM                79      // 组电流异常告警
#define ALARM_TYPE_CELL_VOL_SUDCHG_ALARM                  80      // 单体电压突变告警

#define ALARM_TYPE_RESERVE1_ALARM                         144      // 保留1告警
#define ALARM_TYPE_RESERVE2_ALARM                         145      // 保留2告警
#define ALARM_TYPE_RESERVE3_ALARM                         146      // 保留3告警
#define ALARM_TYPE_RESERVE4_ALARM                         147      // 保留4告警
#define ALARM_TYPE_RESERVE5_ALARM                         148      // 保留5告警
#define ALARM_TYPE_RESERVE6_ALARM                         149      // 保留6告警

#define ALARM_TYPE_SGL_TEMP_RISE_ALARM                    150     // 单体温升报警
#define ALARM_TYPE_POWER_LINE_TEMP_RISE_ALARM             151     // 动力线温升报警
#define ALARM_TYPE_BMU_BCMU_COM_FAULT                     152     // BMU与BCMU通讯故障
#define ALARM_TYPE_BCMU_BA_COM_FAULT                      153     // BCMU与BA通讯故障
#define ALARM_TYPE_SGL_VOL_WIRE_FAULT                     154     // 单体电压采集线故障
#define ALARM_TYPE_BANK_VOL_WIRE_FAULT                    155     // 总压采集线故障
#define ALARM_TYPE_CUR_WIRE_FAULT                         156     // 电流采集线故障
#define ALARM_TYPE_TEMP_WIRE_BREAK                        157     // 温度采集断线
#define ALARM_TYPE_TEMP_SHORT_CIRCUIT                     158     // 温度采集短路
#define ALARM_TYPE_SGL_VOL_INVALID                        159     // 单体电压无效
#define ALARM_TYPE_SGL_TEMP_INVALID                       160     // 单体温度无效
#define ALARM_TYPE_BANK_VOL_INVALID                       161     // 组端电压无效
#define ALARM_TYPE_ENV_TEMP_INVALID                       162     // 环境温度无效
#define ALARM_TYPE_CUR_ABNORMITY                          163     // 组电流异常
#define ALARM_TYPE_POS_RES_INVALID                        164     // 正极绝缘内阻无效
#define ALARM_TYPE_NEG_RES_INVALID                        165     // 负极绝缘内阻无效
#define ALARM_TYPE_POS_ADHE_FAULT                         166     // 总正接触器粘连故障
#define ALARM_TYPE_NEG_ADHE_FAULT                         167     // 总负接触器粘连故障
#define ALARM_TYPE_PRE_ADHE_FAULT                         168     // 预充接触器粘连故障
#define ALARM_TYPE_PWLN_TEMP_INVALID                      169     // 动力线温度无效
#define ALARM_TYPE_HALL_COM_FAULT                         170     // 霍尔通讯故障
#define ALARM_TYPE_HALL_DAC_FAULT                         171     // 霍尔采集故障
#define ALARM_TYPE_POS_NOT_CLOSE_FAULT                    172     // 总正接触器无法闭合故障
#define ALARM_TYPE_NEG_NOT_CLOSE_FAULT                    173     // 总负接触器无法闭合故障
#define ALARM_TYPE_PRE_NOT_CLOSE_FAULT                    174     // 预充接触器无法闭合故障
#define ALARM_TYPE_PRE_CHG_FAULT                          175     // 预充失败
#define ALARM_TYPE_BANK_VOL_DIFF_FAULT                    176     // 组压采集差故障
#define ALARM_TYPE_POS_FUSE_BLOW                          177     // 正极熔断器熔断
#define ALARM_TYPE_NEG_FUSE_BLOW                          178     // 负极熔断器熔断
#define ALARM_TYPE_IN_RES_ABNORMAL_ALARM                  179     // 内阻异常报警
#define ALARM_TYPE_PRECHARGE_FAILED                       180     // 预充异常报警

#define ALARM_TYPE_BANK_VOL_UP_LIMIT_PROT                 201     // 组端电压上限保护
#define ALARM_TYPE_BANK_VOL_DOWN_LIMIT_PROT               202     // 组端电压下限保护
#define ALARM_TYPE_CHARGE_CUR_UP_LIMIT_PROT               203     // 充电电流上限保护
#define ALARM_TYPE_DISCHARGE_CUR_UP_LIMIT_PROT            204     // 放电电流上限保护
#define ALARM_TYPE_SGL_VOL_UP_LIMIT_PROT                  205     // 单体电压上限保护   
#define ALARM_TYPE_SGL_VOL_DOWN_LIMIT_PROT                206     // 单体电压下限保护 
#define ALARM_TYPE_CHG_SGL_TEMP_UP_LIMIT_PROT             207     // 充电温度上限保护 
#define ALARM_TYPE_CHG_SGL_TEMP_DOWN_LIMIT_PROT           208     // 充电温度下限保护 
#define ALARM_TYPE_DCHG_SGL_TEMP_UP_LIMIT_PROT            209     // 放电温度上限保护 
#define ALARM_TYPE_DCHG_SGL_TEMP_DOWN_LIMIT_PROT          210     // 放电温度下限保护 
#define ALARM_TYPE_SGL_TEMP_UP_LIMIT_PROT                 211     // 单体温度上限保护 
#define ALARM_TYPE_SGL_TEMP_DOWN_LIMIT_PROT               212     // 单体温度下限保护 
#define ALARM_TYPE_ENV_TEMP_UP_LIMIT_PROT                 213     // 环境温度上限保护  
#define ALARM_TYPE_ENV_TEMP_DOWN_LIMIT_PROT               214     // 环境温度下限保护 
#define ALARM_TYPE_POWER_LINE_TEMP_UP_LIMIT_PROT          215     // 动力线温度上限保护 
#define ALARM_TYPE_BANK_SOC_UP_LIMIT_PROT                 216     // 组端SOC上限保护
#define ALARM_TYPE_BANK_SOC_DOWN_LIMIT_PROT               217     // 组端SOC下限保护
#define ALARM_TYPE_POS_RES_DOWN_LIMIT_PROT                218     // 正极绝缘内阻下限保护
#define ALARM_TYPE_NEG_RES_DOWN_LIMIT_PROT                219     // 负极绝缘内阻下限保护
#define ALARM_TYPE_PACK_VOL_DIFF_UP_LIMIT_PROT            220     // 箱压差上限保护
#define ALARM_TYPE_PACK_TEMP_DIFF_UP_LIMIT_PROT           221     // 箱温差上限保护
#define ALARM_TYPE_BANK_VOL_DIFF_UP_LIMIT_PROT            222     // 组压采集差上限保护
#define ALARM_TYPE_PACK_VOL_UP_LIMIT_PROT                 223     // 箱电压上限保护
#define ALARM_TYPE_PACK_VOL_DOWN_LIMIT_PROT               224     // 箱电压下限保护
#define ALARM_TYPE_CELL_VOL_DIFF_UP_LIMIT_PROT            225     // 组内单体电压极差上限保护
#define ALARM_TYPE_CELL_TEMP_DIFF_UP_LIMIT_PROT           226     // 组内单体温度极差上限保护
#define ALARM_TYPE_MODULE_VOL_DIFF_UP_LIMIT_PROT          227     // 组内模块电压极差上限保护
#define ALARM_TYPE_HV_POWER_LINE_TEMP_UP_LIMIT_PROT       228     // 高压动力线温度上限保护 
#define ALARM_TYPE_BANK_CUR_ABNORMAL_PROT                 229     // 组电流异常保护
#define ALARM_TYPE_CELL_VOL_SUDCHG_PROT                   230     // 单体电压突变

#define ALARM_TYPE_RESERVE1_PROT                          246     // 保留1保护
#define ALARM_TYPE_RESERVE2_PROT                          247     // 保留2保护
#define ALARM_TYPE_RESERVE3_PROT                          248     // 保留3保护
#define ALARM_TYPE_RESERVE4_PROT                          249     // 保留4保护
#define ALARM_TYPE_RESERVE5_PROT                          250     // 保留5保护
#define ALARM_TYPE_RESERVE6_PROT                          251     // 保留6保护

#define ALARM_TYPE_EX_IO_MODU_CONN_FAULT                  252     // 扩展IO模块通讯故障
#define ALARM_TYPE_EMER_STOP                              253     // 紧急停机
#define ALARM_TYPE_FIRE_ALARM                             254     // 消防报警
#define ALARM_TYPE_WATER_ALARM                            255     // 水浸报警

// 电池组状态    1 - 开路 2 - 待机 3 - 充电  4 - 放电
#define BANK_STATE_OPEN                                    1      // 开路
#define BANK_STATE_STANDBY                                 2      // 待机
#define BANK_STATE_CHARGE                                  3      // 充电
#define BANK_STATE_DISCHARGE                               4      // 放电

// Invalid Value
#define BANK_VOL_SAMPLE_INVALID_VALUE_UP                   2000  
#define BANK_VOL_SAMPLE_INVALID_VALUE_DOWN                 -0.00001  
#define BANK_CUR_SAMPLE_INVALID_VALUE_UP                   2000 
#define BANK_CUR_SAMPLE_INVALID_VALUE_DOWN                 -2000  
#define PACK_VOL_SAMPLE_INVALID_VALUE_UP                   1000  
#define PACK_VOL_SAMPLE_INVALID_VALUE_DOWN                 -0.00001  
#define SGL_VOL_SAMPLE_INVALID_VALUE_UP                    64
#define SGL_VOL_SAMPLE_INVALID_VALUE_DOWN                  -0.00001 
#define TMP_SAMPLE_INVALID_VALUE_UP                        141  
#define TMP_SAMPLE_INVALID_VALUE_DOWN                     -90  
#define SGL_RES_SAMPLE_INVALID_VALUE_UP                    64  
#define SGL_RES_SAMPLE_INVALID_VALUE_DOWN                  -0.00001    
#define SOC_SAMPLE_INVALID_VALUE_UP                        101 
#define SOC_SAMPLE_INVALID_VALUE_DOWN                      -0.00001    
#define SOH_SAMPLE_INVALID_VALUE_UP                        101 
#define SOH_SAMPLE_INVALID_VALUE_DOWN                      -0.00001      
#define BANK_INSULATION_RES_SAMPLE_INVALID_VALUE_UP        9990 
#define BANK_INSULATION_RES_SAMPLE_INVALID_VALUE_DOWN      -0.00001  

#define SAMPLE_INVALID_VALUE_UP                            990 
#define SAMPLE_INVALID_VALUE_DOWN                          -990    

// 通用命令流程 xndacsrv 处理结果(< 100)、xnview处理结果(101~200)  通用命令类型 (201 ~ 500)
#define COMMON_CMD_TYPE_EXE_RESULT_DAC_EXEING              0          // 正在执行 - xndacsrv 处理 
#define COMMON_CMD_TYPE_EXE_RESULT_DAC_OK                  1          // 成功  
#define COMMON_CMD_TYPE_EXE_RESULT_DAC_FAILED              2          // 失败

#define COMMON_CMD_TYPE_EXE_RESULT_VIEW_OK                 101         // 成功 - xnview 处理 
#define COMMON_CMD_TYPE_EXE_RESULT_VIEW_FAILED             102         // 失败

#define COMMON_CMD_TYPE_READ_ALARM_PARMA                   201         // 读报警参数
#define COMMON_CMD_TYPE_READ_PROT_PARMA                    202         // 读保护参数
#define COMMON_CMD_TYPE_READ_ALARM_DIFF                    203         // 读报警回差
#define COMMON_CMD_TYPE_READ_PROT_DIFF                     204         // 读保护回差
#define COMMON_CMD_TYPE_READ_PACK_DIFF_PARMA               205         // 读箱压差温差
#define COMMON_CMD_TYPE_WRITE_ALARM_PARMA                  206         // 写报警参数
#define COMMON_CMD_TYPE_WRITE_PROT_PARMA                   207         // 写保护参数
#define COMMON_CMD_TYPE_WRITE_ALARM_DIFF                   208         // 写报警回差
#define COMMON_CMD_TYPE_WRITE_PROT_DIFF                    209         // 写保护回差
#define COMMON_CMD_TYPE_WRITE_PACK_DIFF_PARMA              210         // 写箱压差温差
#define COMMON_CMD_TYPE_READ_WARN_PARMA                    211         // 读预警参数
#define COMMON_CMD_TYPE_READ_WARN_DIFF                     212         // 读预警回差
#define COMMON_CMD_TYPE_WRITE_WARN_PARMA                   213         // 写预警参数
#define COMMON_CMD_TYPE_WRITE_WARN_DIFF                    214         // 写预警回差
#define COMMON_CMD_TYPE_READ_BCMU_PARAM1                   215         // 读BCMU参数1
#define COMMON_CMD_TYPE_READ_BMU_PARAM                     216         // 读BMU参数
#define COMMON_CMD_TYPE_WRITE_BCMU_PARAM1                  217         // 写BCMU参数1
#define COMMON_CMD_TYPE_WRITE_BMU_PARAM                    218         // 写BMU参数
#define COMMON_CMD_TYPE_ALLO_BMU_ADDR                      219         // 分配BMU地址
#define COMMON_CMD_TYPE_WRITE_PARAM_TO_BMU                 220         // 写参数到BMU

#define COMMON_CMD_EXE_NUM                                 3          // 命令执行次数

// 预充控制
#define PRE_CHG_CTRL_STATE_UNKOWN                          0           // 未知
#define PRE_CHG_CTRL_STATE_POS_CLOSE                       1           // 总正闭合
#define PRE_CHG_CTRL_STATE_POS_BREAK                       2           // 总正断开
#define PRE_CHG_CTRL_STATE_NEG_CLOSE                       3           // 总负闭合
#define PRE_CHG_CTRL_STATE_NEG_BREAK                       4           // 总负断开
#define PRE_CHG_CTRL_STATE_PRE_CHG_CLOSE                   5           // 预充电路闭合
#define PRE_CHG_CTRL_STATE_PRE_CHG_BREAK                   6           // 预充电路断开
#define PRE_CHG_CTRL_STATE_POS_CLOSE_CHECK                 7           // 总正闭合检查

#define PRE_CHG_CTRL_STATE_BREAK                           9           // 故障状态
#define PRE_CHG_CTRL_STATE_FULFIL                          10          // 预充电路完成

//获取数组数量
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))

typedef struct _SAlarm
{
	quint16 usYear;        // 开始时间 - 年
	quint16 usMonth;       // 开始时间 - 月
	quint16 usDay;         // 开始时间 - 日
	quint16 usHour;        // 开始时间 - 时
	quint16 usMin;         // 开始时间 - 分
	quint16 usSec;         // 开始时间 - 秒

	quint16 usType;        // 告警类型
	float fSampVal;        // 采集值
	float fThreVal;        // 设置的阈值
	
	quint16 usCellNo;      // 节号 或 箱号
	quint16 usNo1;         // 序号1 - 通用
	quint16 usNo2;         // 序号2 - 通用
	quint16 usNextNo;      // 下条告警序号
}SAlarm;

typedef struct _SAlarmCache
{
	quint16 usYear;        // 开始时间 - 年
	quint16 usMonth;       // 开始时间 - 月
	quint16 usDay;         // 开始时间 - 日
	quint16 usHour;        // 开始时间 - 时
	quint16 usMin;         // 开始时间 - 分
	quint16 usSec;         // 开始时间 - 秒
	quint16 usMsec;        // 开始时间 - 毫秒

	quint16 usType;        // 告警类型 与 离散寄存器地址 一致
	quint16 usCellNo;      // 节号 或 箱号
	quint16 usAlmVal;      // 告警值 0 - 无告警, 1 - 告警
	float fSampVal;        // 采集值 
	float fThreVal;        // 设置的阈值

	quint16 usNo1;         // 序号1 - 通用
	quint16 usNo2;         // 序号2 - 通用
}SAlarmCache;

typedef struct _SAlarmParam
{
	float fBankVolUpLimitWarn;
	float fBankVolDownLimitWarn;
	float fChargeCurUpLimitWarn;
	float fDischargeCurUpLimitWarn;
	float fSglVolUpLimitWarn;
	float fSglVolDownLimitWarn;
	float fChargeSglTempUpLimitWarn;
	float fChargeSglTempDownLimitWarn;
	float fDchargeSglTempUpLimitWarn;
	float fDchargeSglTempDownLimitWarn;
	float fSglTempUpLimitWarn;
	float fSglTempDownLimitWarn;
	float fEnvTempUpLimitWarn;
	float fEnvTempDownLimitWarn;
	float fPowerLineTempUpLimitWarn;
	float fBankSocUpLimitWarn;
	float fBankSocDownLimitWarn;
	float fPosResDownLimitWarn;		
	float fNegResDownLimitWarn;	
	float fPackVolDiffUpLimitWarn;
	float fPackTempDiffUpLimitWarn;
	float fBankVolDiffUpLimitWarn;
	float fPackVolUpLimitWarn;
	float fPackVolDownLimitWarn;
	float fCellVolDiffUpLimitWarn;
	float fCellTempDiffUpLimitWarn;
	float fModuleVolDiffUpLimitWarn;
	float fHvPowerLineTempUpLimitWarn;

	float fBankVolUpLimitAlarm;
	float fBankVolDownLimitAlarm;
	float fChargeCurUpLimitAlarm;
	float fDischargeCurUpLimitAlarm;
	float fSglVolUpLimitAlarm;
	float fSglVolDownLimitAlarm;
	float fChargeSglTempUpLimitAlarm;
	float fChargeSglTempDownLimitAlarm;
	float fDchargeSglTempUpLimitAlarm;
	float fDchargeSglTempDownLimitAlarm;
	float fSglTempUpLimitAlarm;
	float fSglTempDownLimitAlarm;
	float fEnvTempUpLimitAlarm;
	float fEnvTempDownLimitAlarm;
	float fPowerLineTempUpLimitAlarm;
	float fBankSocUpLimitAlarm;
	float fBankSocDownLimitAlarm;
	float fPosResDownLimitAlarm;		
	float fNegResDownLimitAlarm;	
	float fPackVolDiffUpLimitAlarm;
	float fPackTempDiffUpLimitAlarm;
	float fBankVolDiffUpLimitAlarm;
	float fPackVolUpLimitAlarm;
	float fPackVolDownLimitAlarm;
	float fCellVolDiffUpLimitAlarm;
	float fCellTempDiffUpLimitAlarm;
	float fModuleVolDiffUpLimitAlarm;
	float fHvPowerLineTempUpLimitAlarm;
	
	float fBankVolUpLimitProt;
	float fBankVolDownLimitProt;
	float fChargeCurUpLimitProt;
	float fDischargeCurUpLimitProt;
	float fSglVolUpLimitProt;
	float fSglVolDownLimitProt;
	float fChargeSglTempUpLimitProt;
	float fChargeSglTempDownLimitProt;
	float fDchargeSglTempUpLimitProt;
	float fDchargeSglTempDownLimitProt;
	float fSglTempUpLimitProt;
	float fSglTempDownLimitProt;
	float fEnvTempUpLimitProt;
	float fEnvTempDownLimitProt;
	float fPowerLineTempUpLimitProt;
	float fBankSocUpLimitProt;
	float fBankSocDownLimitProt;
	float fPosResDownLimitProt;		
	float fNegResDownLimitProt;	
	float fPackVolDiffUpLimitProt;
	float fPackTempDiffUpLimitProt;
	float fBankVolDiffUpLimitProt;
	float fPackVolUpLimitProt;
	float fPackVolDownLimitProt;
	float fCellVolDiffUpLimitProt;
	float fCellTempDiffUpLimitProt;
	float fModuleVolDiffUpLimitProt;
	float fHvPowerLineTempUpLimitProt;

	float fBankVolUpLimitWarnHC;
	float fBankVolDownLimitWarnHC;
	float fChargeCurUpLimitWarnHC;
	float fDischargeCurUpLimitWarnHC;
	float fSglVolUpLimitWarnHC;
	float fSglVolDownLimitWarnHC;
	float fChargeSglTempUpLimitWarnHC;
	float fChargeSglTempDownLimitWarnHC;
	float fDchargeSglTempUpLimitWarnHC;
	float fDchargeSglTempDownLimitWarnHC;
	float fSglTempUpLimitWarnHC;
	float fSglTempDownLimitWarnHC;
	float fEnvTempUpLimitWarnHC;
	float fEnvTempDownLimitWarnHC;
	float fPowerLineTempUpLimitWarnHC;
	float fBankSocUpLimitWarnHC;
	float fBankSocDownLimitWarnHC;
	float fPosResDownLimitWarnHC;		
	float fNegResDownLimitWarnHC;	
	float fPackVolDiffUpLimitWarnHC;
	float fPackTempDiffUpLimitWarnHC;
	float fBankVolDiffUpLimitWarnHC;
	float fPackVolUpLimitWarnHC;
	float fPackVolDownLimitWarnHC;
	float fCellVolDiffUpLimitWarnHC;
	float fCellTempDiffUpLimitWarnHC;
	float fModuleVolDiffUpLimitWarnHC;
	float fHvPowerLineTempUpLimitWarnHC;

	float fBankVolUpLimitAlarmHC;
	float fBankVolDownLimitAlarmHC;
	float fChargeCurUpLimitAlarmHC;
	float fDischargeCurUpLimitAlarmHC;
	float fSglVolUpLimitAlarmHC;
	float fSglVolDownLimitAlarmHC;
	float fChargeSglTempUpLimitAlarmHC;
	float fChargeSglTempDownLimitAlarmHC;
	float fDchargeSglTempUpLimitAlarmHC;
	float fDchargeSglTempDownLimitAlarmHC;
	float fSglTempUpLimitAlarmHC;
	float fSglTempDownLimitAlarmHC;
	float fEnvTempUpLimitAlarmHC;
	float fEnvTempDownLimitAlarmHC;
	float fPowerLineTempUpLimitAlarmHC;
	float fBankSocUpLimitAlarmHC;
	float fBankSocDownLimitAlarmHC;
	float fPosResDownLimitAlarmHC;		
	float fNegResDownLimitAlarmHC;	
	float fPackVolDiffUpLimitAlarmHC;
	float fPackTempDiffUpLimitAlarmHC;
	float fBankVolDiffUpLimitAlarmHC;
	float fPackVolUpLimitAlarmHC;
	float fPackVolDownLimitAlarmHC;
	float fCellVolDiffUpLimitAlarmHC;
	float fCellTempDiffUpLimitAlarmHC;
	float fModuleVolDiffUpLimitAlarmHC;
	float fHvPowerLineTempUpLimitAlarmHC;

	float fBankVolUpLimitProtHC;
	float fBankVolDownLimitProtHC;
	float fChargeCurUpLimitProtHC;
	float fDischargeCurUpLimitProtHC;
	float fSglVolUpLimitProtHC;
	float fSglVolDownLimitProtHC;
	float fChargeSglTempUpLimitProtHC;
	float fChargeSglTempDownLimitProtHC;
	float fDchargeSglTempUpLimitProtHC;
	float fDchargeSglTempDownLimitProtHC;
	float fSglTempUpLimitProtHC;
	float fSglTempDownLimitProtHC;
	float fEnvTempUpLimitProtHC;
	float fEnvTempDownLimitProtHC;
	float fPowerLineTempUpLimitProtHC;
	float fBankSocUpLimitProtHC;
	float fBankSocDownLimitProtHC;
	float fPosResDownLimitProtHC;		
	float fNegResDownLimitProtHC;	
	float fPackVolDiffUpLimitProtHC;
	float fPackTempDiffUpLimitProtHC;
	float fBankVolDiffUpLimitProtHC;
	float fPackVolUpLimitProtHC;
	float fPackVolDownLimitProtHC;
	float fCellVolDiffUpLimitProtHC;
	float fCellTempDiffUpLimitProtHC;
	float fModuleVolDiffUpLimitProtHC;
	float fHvPowerLineTempUpLimitProtHC;

	float fResWarn1;                   // 预留告警
	float fResWarn2;    
	float fResWarn3; 
	float fResWarn4; 
	float fResAlarm1;   
	float fResAlarm2; 
	float fResAlarm3;   
	float fResAlarm4; 
	float fResProt1;  
	float fResProt2;  
	float fResProt3;  
	float fResProt4;  

	float fResWarnHC1;                  
	float fResWarnHC2;    
	float fResWarnHC3; 
	float fResWarnHC4; 
	float fResAlarmHC1;   
	float fResAlarmHC2; 
	float fResAlarmHC3;   
	float fResAlarmHC4; 
	float fResProtHC1;  
	float fResProtHC2;  
	float fResProtHC3;  
	float fResProtHC4;
}SAlarmParam;

typedef struct _SMdobusTcpReq
{
	quint16 usEvent;       // 事务标识
	quint16 usProto;       // 协议标识
	quint16 usLen;         // 长度
 	uchar uaAddr;          // 地址
	uchar uaFuncCode;      // 功能码
	quint16 usRegAddr;     // 开始寄存器地址
	quint16 usRegNum;      // 寄存器数量
}SMdobusTcpReq;

typedef struct _SBMUParam
{
	quint16 usCellNum;       // 电压个数
	quint16 usTempNum;       // 温度个数	
	quint16 usBMUCap;        // BMU容量  
	uchar uaBMUVers1;        // BMU版本号高字节
	uchar uaBMUVers2;        // BMU版本号低字节
}SBMUParam;

// 电池堆数据
class CBattStack
{
public:                                     // 输入寄存器
	quint16 usStackState;                   // 电池堆状态                        1           0x1111禁充 0x2222禁放 0x5555告警 0xAAAA故障 0xBBBB正常
	quint16 usInstallBankNum;               // 安装电池组数                      2
	quint16 usBankNumInStack;               // 电池堆管辖电池组数                3
	quint16 usStackCfgInfo;                 // 电池堆配置信息					 4	         各电池组是否投入运行            
	quint16 usMaxBankSocNo;                 // 组SOC最大组号                     5
	quint16 usMinBankSocNo;                 // 组SOC最小组号                     6
	quint16 usMaxBankVolNo;                 // 组电压最大组号                    7
	quint16 usMinBankVolNo;                 // 组电压最小组号                    8
	quint16 usSglMaxVolBankNo;              // 最高单体电压电池组号              9
	quint16 usSglMaxVolNoInBank;            // 最高电压电池所在组的组内编号      10
	quint16 usSglMinVolBankNo;              // 最低单体电压电池组号              11
	quint16 usSglMinVolNoInBank;            // 最低电压电池所在组的组内编号      12
	quint16 usSglMaxTempBankNo;             // 最高电池温度电池组号              13
	quint16 usSglMaxTempNoInBank;           // 最高电池温度所在组的组内编号      14
	quint16 usSglMinTempBankNo;             // 最低电池温度电池组号              15
	quint16 usSglMinTempNoInBank;           // 最低电池温度所在组的组内编号      16
	quint16	usDI1;				            // 开关量输入-DI1		             17       1--交流正常， 0--交流失电
	quint16	usDI2; 	                        // 开关量输入-DI2                    18       1--闭合，     0--断开
	quint16	usDI3; 	                        // 开关量输入-DI3                    19
	quint16	usDI4; 	                        // 开关量输入-DI4		             20
	quint16 usStackTemp[30];                // 21 - 50  
	
	float fStackVol;                        // 电池堆电压                        51  
	float fStackCur; 	                    // 电池堆电流                        53
	float fStackPower;                      // 电池堆功率
	float fStackInsuRes;                    // 系统绝缘
	float fStackSoc;                        // 电池堆SOC                         55
	float fStackSoh; 	                    // 电池堆SOH                         57
	float fStackChargeEQ; 	                // 电池堆可充电量                    59
	float fStackDischargeEQ;                // 电池堆可放电量                    61
	float fStackSglChargeEQ;                // 电池堆单次充电电量                63
	float fStackSglDischargeEQ;             // 电池堆单次放电电量                65
	double dblStackChargeEQAdd;             // 电池堆充电量累加值                67
	double dblStackDischargeEQAdd; 	        // 电池堆放电量累加值                69
	float fStackSglChargeAh;                // 电池堆单次充电容量                
	float fStackSglDischargeAh;             // 电池堆单次放电容量                
	double dblStackChargeAhAdd;             // 电池堆充容量累加值                
	double dblStackDischargeAhAdd; 	        // 电池堆放容量累加值   
	float fSglVolDiffInStack;               // 单体电压压差极差值	             71
	float fSglMaxVolInStack;                // 最高单体电压   		             73
	float fSglMinVolInStack;                // 最低单体电压                      75
	float fSglTempDiffInStack;              // 电池温度温差极差值	             77
	float fSglMaxTempInStack;               // 最高电池温度                      79
	float fSglMinTempInStack;               // 最低电池温度                      81
	float fBankSocDiff;                     // 组SOC差极差值	                 83
	float fBankSocMax;                      // 组SOC最大                         85
	float fBankSocMin;                      // 组SOC最小                         87
    float fBankVolDiff;                     // 组电压差极差值	                 89
	float fBankVolMax;                      // 组电压最大                        91
	float fBankVolMin;                      // 组电压最小                        93
	float fStackAllowMaxChargePower;        // 电池堆当前允许最大充电功率        95 
	float fStackAllowMaxDischargePower;     // 电池堆当前允许最大放电功率        97 
	float fStackAllowMaxChargeCurrent;      // 电池堆当前允许最大充电电流        99 
	float fStackAllowMaxDischargeCurrent;   // 电池堆当前允许最大放电电流        101 
	float fStackTemp[49];                   // 103 - 200  	

	quint16 usMaxBankCurNo;                 // 组电流最大组号              
	quint16 usMinBankCurNo;                 // 组电流最小组号   
	float fBankCurDiff;                     // 组电流差极差值	        
	float fBankCurMax;                      // 组电流最大                       
	float fBankCurMin;                      // 组电流最小                     

									        // 离散输入寄存器
	char aEmerStop;                         // 紧急停机
	char aFireWarn;                         // 消防预警
	char aFireAction;                       // 消防启动
	char aFireFault;                        // 消防故障
	char aWaterAlarm;                       // 水浸告警  
    char aGasAlarm;                         // 可燃气体
	char aAcceCtrlState;                    // 门禁状态    
	char aPCSCommFault;                     // PCS通讯故障
	char aEMSCommFault;                     // EMS通讯故障
	char aConfSwitchState;                  // 汇流开关反馈
	char aExIOModuConnFault;   	            // 扩展IO模块通讯故障
	char aStackTemp[50];                    // 1 - 50//数组10用来判断CAN是否启动；

	                                        // 版本信息
	quint16 usBMSUpgradeState;              // BMS升级状态  8001
	quint16 usBaVersMajor;                  // BAMS主版本   8002
	quint16 usBaVersMinor;                  //              8003
	quint16 usBaVersRevision;               //              8004
	quint16 usCompVers1;                    // 组件版本     8005
	quint16 usCompVers2;                    //              8006
	quint16 usCompVers3;                    //              8007
	quint16 usCompVers4;                    //              8008
	quint16 usCompVers5;                    //              8009
	quint16 usCompVers6;                    //              8010
	uchar uaBCVersMajor1;                   // BC主板本号   8011
	uchar uaBCVersMajor2;                   //              8012
	uchar uaBCVersMinor1;                   // BC次板本号   8013
	uchar uaBCVersMinor2;                   //              8014
	uchar uaBCBootVers1;                    // BC Boot版本  8015
	uchar uaBCBootVers2;                    //              8016
	uchar uaBMUVers1;                       // BMU版本号    8017
	uchar uaBMUVers2;                       //              8018

	                                        // 动环信息
	char aACCommFault[MAX_AC_NUM];	        // 空调通讯故障     
	char aACState[MAX_AC_NUM];	            // 空调运行状态
	char aTHCommFault[MAX_TEMP_HUMI_NUM];   // 温湿度通讯故障
	char aEnvWaterAlarm[MAX_WATER_NUM];     // 水浸告警
	char aEnvTemp[50];                      // 动环开关量

	float fACTemp[MAX_AC_NUM];              // 空调温度
	float fACHumi [MAX_AC_NUM];             // 空调温度
	float fTHTemp[MAX_TEMP_HUMI_NUM];       // 温湿度温度
	float fTHHumi [MAX_TEMP_HUMI_NUM];      // 温湿度湿度
	float fEnvTemp[50];                     // 动环模拟量

	// 内部使用测点	                        // Modbus 寄存器地址从 1000 开始
	quint16 usBankStateSum;                 // 各组状态汇总   0 - 无  0x0001 - 充满  0x0002 - 放空  
	quint16 usVersIncomp;                   // 版本不兼容     0 - 版本兼容   1 - 版本不兼容
	uchar uaRtdbVersMajor;                  // rtdb1版本
	uchar uaRtdbVersMinor;                  // rtdb2版本
	uchar uaRtdbVersRevision;               // rtdb3版本

	uchar uaDacSrvVers;                     // xndacsrv  版本
	uchar uaDacAssVers;                     // xndacass  版本
	uchar uaProcSrvVers;                    // xnprocsrv 版本
	uchar uaTranSrvVers;                    // xntransrv 版本
	uchar uaViewVers;                       // xnview 版本
	uchar uaPlatVers;                       // xnplat 版本

	uchar uaSaveSrvVers;                    // xnsavesrv 版本
	uchar uaPCSSrvVers;                     // PCS       PCS通讯
	uchar uaExIOVers;                       // ExIO      扩展IO模块	
	uchar uaACVers;                         // AC        空调温湿度
	uchar ua104Vers;                        // 104       IEC104通讯
	uchar ua61850Vers;                      // 61850     IEC61850通讯

	quint16 usACStrategy;                   // 动环配置 - 空调策略   0 - 无配置 1 - 英维克 2 - 黑盾 3 - 盖鼎 4 - 同飞
	quint16 usACNum;                        // 空调数量
	quint16	usACCommSerialPortNo;           // 串口号

	quint16 usTHStrategy;                   // 动环配置 - 温湿度策略 0 - 无配置 1 - 仁科 
	quint16 usTHNum;                        // 温湿度数量
	quint16	usTHCommSerialPortNo;           // 串口号

	quint16 usWaterNum;                     // 水浸告警

	quint16	usLastDI1;                      // 上一次 BAMS DI
	quint16	usLastDI2;  
	quint16	usLastDI3;  
	quint16	usLastDI4;  

	quint16 usDO1State;                     // 干接点1状态
	quint16 usDO2State;                     // 干接点2状态
	quint16 usDO3State;                     // 干接点3状态
	quint16 usDO4State;                     // 干接点4状态
	
	quint16 usDO1Ctrl;                      // 干接点1控制	
	quint16 usDO2Ctrl;                      // 干接点2控制
	quint16 usDO3Ctrl;                      // 干接点3控制
	quint16 usDO4Ctrl;                      // 干接点4控制

	quint16 usDCSideConfType;               // 直流侧汇入类型 0 - 并联汇入  1 - 各组独立  2 - 分支路汇入
	quint16 usMultiConfBankNum;             // 各支路组数
	quint16 usBranNum;                      // 支路数	
	quint16 usBranCfgInfo[MAX_BANK_NUM];    // 支路1电池组配置信息
	float fBranCurBankLargeCur;             // 组大电流  异常电流检测
	float fBranCurBranchCur;                // 支路电流
	quint16 usBranCurDuration;              // 持续时间 秒
	quint16 usBranCurAbnoRecord[MAX_BANK_NUM]; // 组电流异常开始时间
	quint16 usBranCurAbnoYear[MAX_BANK_NUM];  
	quint16 usBranCurAbnoMonth[MAX_BANK_NUM]; 
	quint16 usBranCurAbnoDay[MAX_BANK_NUM]; 
	quint16 usBranCurAbnoHour[MAX_BANK_NUM]; 
	quint16 usBranCurAbnoMin[MAX_BANK_NUM]; 
	quint16 usBranCurAbnoSec[MAX_BANK_NUM]; 

	quint16 usBankVolDiffCount[MAX_BANK_NUM]; // 支路组端电压差计数

	quint16 usEMSCommStrategy;              // EMS通讯策略 0 - Modbus TCP 1 - Xn104 2- Xn61850
	char    aIEDName[20];                   // IED 名称
	quint16	usPCSCommStrategy;              // PCS通讯策略 0 - 科工串口 1 - 科华串口 2 - 阳光串口 3 - 汇川串口 4 - 串口配置 11 - 科工Can 12 - 团标Can 21 - 南瑞网口 99 - 其他
	quint16	usPCSCommSerialPortNo;          // 串口号
	quint16 usPCSCommIP1;                   // PCS通讯IP1
	quint16 usPCSCommIP2;                   // PCS通讯IP2
	quint16 usPCSCommIP3;                   // PCS通讯IP3
	quint16 usPCSCommIP4;                   // PCS通讯IP4

	quint16 usRunMode;                      // 运行模式         0 - 就地   1 - 远程
	quint16 usCtrlLoopType;                 // 控制回路类型     0 - 总正   1 - 总正,总负  2 - 总正,总负,预充  3 - 无反馈  4 - 总正,预充     
	quint16 usCtrlLoopCloseAct;             // 控制回路闭合方式 0 - 立刻闭合 1 - 确认后闭合(I类) 所有保护  2 - 确认后闭合(II类) 过压过流欠压
	float fBranVolDiff;                     // 支路电压差

	float fNominalCap;                      // 标称容量
	float fActualCap;                       // 实际容量(标定容量)
	float fRatedVol;                        // 平台电压

	float fSglTempRiseCheckVal;             // 单体电池温升快 5/1分钟
	float fPowerLineTempRiseCheckVal;       // 动力线温升快   5/1分钟

	float fSglVolSudChgUpLimitAlarm;          // 单体电压突变 告警值
	float fSglVolSudChgUpLimitAlarmHC;        // 单体电压突变 告警回差值
	float fSglVolSudChgUpLimitProt;           // 单体电压突变 保护值
	float fSglVolSudChgUpLimitProtHC;         // 单体电压突变 保护回差值
	float fResAbnormalChgVol;                 // 单体内阻异常,充电电压
	float fResAbnormalDchgVol;                // 单体内阻异常,放电电压
	float fPrechgAbnormalTime;                // 预充失败时间 分
	float fBankCurDiffWarn;                   // 组间环流过大预警
	float fBankCurDiffAlarm;                  // 组间环流过大告警
	float fBankCurDiffProt;                   // 组间环流过大保护
	
	quint16 usLang;                         // 语言        0 - 中文     1 - 英文         Misc.ini
	quint16 usLogo;                         // Logo        0 - 科工     1 - 中性(默认先从文件中加载)   
	quint16 usDacAssStrategy;               // 辅助采集策略 0 - 禁用    1 - 与采集服务各自一半采集  101 - 采集服务采集组1,其余辅助采集  200 - 全由辅助采集
	quint16 usInsuResStrategy;              // 绝缘监测策略 0 - BC不带绝缘检测 1 - 开路检测  2 - 在线检测  3 - 先闭合组测试 101 ~ 164固定簇测试
	quint16 usPackPowerLineStrategy;        // Pack箱动力线策略 0 - 不采集   1 - (1#负极, N#正极)  2 - (N-1#正极, N#负极)   10 - (N#单极柱)
	quint16 usBankPowerLineStrategy;        // 组端动力线策略
	quint16 usLinkageStrategy;              // 联动跳机策略  保留
	quint16 usBeepStrategy;                 // 蜂鸣器策略  0 - 不启用 1 - 告警和保护蜂鸣  2 - 保护蜂鸣
	quint16 usNetworkNum;                   // 网卡数
	quint16 usFaultLampCtrlDONo;            // 故障灯控制  1 ~ 5, DO1 ~ DO5  
	quint16 usRunLampCtrlDONo;              // 运行灯控制  1 ~ 5, DO1 ~ DO5 
	quint16 usExtFaultLampCtrlDONo;         // 扩展故障灯控制   201 ~ 208 - 扩展IO 
	quint16 usExtRunLampCtrlDONo;           // 扩展运行灯控制   201 ~ 208 - 扩展IO 
	quint16 usConfSwitchOnCtrlDONo;         // 汇流开关合闸控制 201 ~ 208 - 扩展IO 
	quint16 usConfSwitchOffCtrlDONo;        // 汇流开关分闸控制 201 ~ 208 - 扩展IO 
	quint16 usEMSCommFaultDONo;             // EMS通讯故障      201 ~ 208 - 扩展IO 

	quint16 usFanCtrlDONo;                  // 风机控制    1 ~ 5, DO1 ~ DO5
	quint16 usNeedBCInitMask;               // 是否需要等待BC初始完成后,发命令    

	quint16 usForbidChgDchgSglNum;               // 禁充 禁放状态判断,单体个数 
	float fForbidChgRlsEQ;                       // 禁充 状态释放所需放电量
	float fForbidDchgRlsEQ;                      // 禁放 状态释放所需充电量	
	quint16 usForbidChgRlsSglVolUpWarnDiff;      // 组内单体最高降低至(上限预警 - 差值),可继续充电,释放禁充状态
	quint16 usForbidDchgRlsSglVolDownWarnDiff;   // 组内单体最低升高至(下限预警 + 差值),可继续放电,释放禁放状态

	quint16 usPCSDry1Strategy;              // PCS干接点策略 1 - BC 2- BA 
	quint16 usPCSDry1Type;                  // 类型 0 - 未配置 1 - 告警 2 - 保护  3 - 禁充 4 - 禁放 
	quint16 usPCSDry1DONo;                  // DO序号 6 或者 7
	quint16 usPCSDry1AlarmValue;            // 告警值
	quint16 usPCSDry2Strategy;              // PCS干接点策略 1 - BC 2- BA
	quint16 usPCSDry2Type;                  // 类型0 - 未配置 1 - 告警 2 - 保护  3 - 禁充 4 - 禁放 
	quint16 usPCSDry2DONo;                  // DO序号
	quint16 usPCSDry2AlarmValue;            // 告警值

	quint16 usExtPCSDry1Type;               // 类型 0 - 未配置 1 - 告警 2 - 保护  3 - 禁充 4 - 禁放 
	quint16 usExtPCSDry1DONo;               // DO序号 1 或者 2
	quint16 usExtPCSDry1AlarmValue;         // 告警值
	quint16 usExtPCSDry2Type;               // 类型 0 - 未配置 1 - 告警 2 - 保护  3 - 禁充 4 - 禁放 
	quint16 usExtPCSDry2DONo;               // DO序号
	quint16 usExtPCSDry2AlarmValue;         // 告警值

	quint16 usSocCalibStrategy;             // Soc校准策略 1 - 启动 0 - 不启动
	quint16 usSocCalibActive;               // 1 - 激活  0 - 不激活
	float fSocCalibLowCur;                  // 小电流值
	quint16 usSocCalibDuration;             // 持续时间 30分
	quint16 usSocCoe;                       // Soc调整系数

	quint16 usBankSocStrategy;              // 组SOC策略    0 - 单体平均   1 - BA 线性处理SOC     2 - BC计算并上传    3 - SOC由BC计算,SOH由BA计算
	quint16 usSglTempStrategy;              // 单体温度策略 0 - 温度下限不参与 1 - 温度下限参与策略      XnProcSrv.ini	
	quint16 usFaultStrategy;                // 故障策略 0 - 采集线故障、BCMU与BMU通讯故障不参与 BC与BA通讯故障跳机 温度采集线故障不跳机, 1 - 采集线故障、BCMU与BMU通讯故障 BC与BA通讯故障待机跳机 2 - BA与BC、BC与BMU通讯故障 持续5分钟后,PCS状态转化成 待机
	quint16 usAcquDataCrtStrategy;          // 采集数据调整策略
	quint16 usAlarmCacheStrategy;           // 告警缓存配置策略
	quint16 usChgDchgNumStrategy;           // 充放电次数计算策略 0 - 60% 算一次
	quint16 usEnvTempRefBankNo;             // 环境温度参考组号	   
	quint16 usShowWarn;                     // 显示预警
	quint16 usShowSglVolInvalidAlarm;       // 单体电压无效告警显示
	quint16 usRunStateMaintainTime;         // 运行状态维持时间
	quint16 usRunStateRecoveryTime;         // 运行状态恢复时间

	quint16 usSglTempDPStrategy;            // 单体温度数据处理
	quint16 usSglVolDPStrategy;             // 单体电压数据处理

	quint16 usDropPowerEnabled;             // 降功率
	float fDropPowerEndCur;                 // 降功率末端电流
	float fBankMaxChargePower;              // 每组最大值
	float fBankMaxDischargePower;			//参数界面
	float fBankMaxChargeCurrent;			//参数界面
	float fBankMaxDischargeCurrent;			//参数界面
	float fDropPowerRatio;                  // 降功率比例 

	int iPreJCQDelay;                       // 预充时间(秒)  

	quint16 usEquiEnabled;                  // 均衡开启使能
	quint16 usSohEnabled;                   // SOH 使能
	quint16 usCycleTimes;                   // 电池 到 SOH = 80% 的循环次数
	
	quint16 usIsolSwitchStrategy;           // 隔离开关策略 0 - 无隔离开关 1 - 每组BC(DI3)反馈 2 - 每组BC(DI4)反馈 101 ~ 104 BA4个DI汇总 200 - 3rd进程设定  隔离开关闭合,才能闭合接触器   
	quint16 usIsolSwitchAggrState;          // 隔离开关汇总状态 0 - 断开  1 - 全部闭合
	
	quint16	usExIOCommSerialPortNo;         // 扩展IO模块通讯串口号

	quint16 usConfSwitchStrategy;           // 汇流开关策略    1 - BC 2- BA 3 - ExtIO         
	quint16 usConfSwitchDINo;               // DI序号
	quint16 usConfSwitchAlarmValue;         // 告警值
	quint16 usLastConfSwitchState;          // 汇流开关汇上次状态       0 - 默认  1 - 闭合  2 - 断开
	quint16 usConfSwitchState;              // 汇流开关汇状态           0 - 默认  1 - 闭合  2 - 断开

	quint16 usEmerStopStrategy;             // 紧急停机策略     1 - BC 2- BA 3 - ExtIO   	     
	quint16 usEmerStopDINo;                 // DI序号
	quint16 usEmerStopAlarmValue;           // 告警值	
	quint16 usLastEmerStopState;            // 紧急停机上次状态         0 - 默认  1 - 告警  2 - 正常
	quint16 usEmerStopState;                // 紧急停机状态             0 - 默认  1 - 告警  2 - 正常

	quint16 usFireWarnStrategy;             // 消防预警策略     1 - BC 2- BA 3 - ExtIO  	     
	quint16 usFireWarnDINo;                 // DI序号
	quint16 usFireWarnAlarmValue;           // 告警值	

	quint16 usFireActionStrategy;           // 消防启动策略     1 - BC 2- BA 3 - ExtIO  	     
	quint16 usFireActionDINo;               // DI序号
	quint16 usFireActionAlarmValue;         // 告警值	

	quint16 usFireFaultStrategy;            // 消防故障策略     1 - BC 2- BA 3 - ExtIO  	     
	quint16 usFireFaultDINo;                // DI序号
	quint16 usFireFaultAlarmValue;          // 告警值	
  
	quint16 usWaterStrategy;                // 水浸告警策略     1 - BC 2- BA 3 - ExtIO  	     
	quint16 usWaterDINo;                    // DI序号
	quint16 usWaterAlarmValue;              // 告警值	
	
	quint16 usGasStrategy;                  // 可燃气体策略     1 - BC 2- BA 3 - ExtIO  	     
	quint16 usGasDINo;                      // DI序号
	quint16 usGasAlarmValue;                // 告警值	

	quint16 usAcceCtrlStrategy;             // 门禁状态策略     1 - BC 2- BA 3 - ExtIO  	     
	quint16 usAcceCtrlDINo;                 // DI序号
	quint16 usAcceCtrlAlarmValue;           // 告警值	

	quint16 usCustom1Strategy;              // 自定义策略     1 - BC 2- BA 3 - ExtIO  	     
	quint16 usCustom1DINo;                  // 自定义DI序号
	quint16 usCustom1AlarmValue;            // 自定义告警值	

	quint16 usCustom2Strategy;              // 自定义策略     1 - BC 2- BA 3 - ExtIO  	     
	quint16 usCustom2DINo;                  // 自定义DI序号
	quint16 usCustom2AlarmValue;            // 自定义告警值	

	quint16 usCustom3Strategy;              // 自定义策略     1 - BC 2- BA 3 - ExtIO  	     
	quint16 usCustom3DINo;                  // 自定义DI序号
	quint16 usCustom3AlarmValue;            // 自定义告警值	

	quint16 usCustom4Strategy;              // 自定义策略     1 - BC 2- BA 3 - ExtIO  	     
	quint16 usCustom4DINo;                  // 自定义DI序号
	quint16 usCustom4AlarmValue;            // 自定义告警值	

	quint16 usCustom5Strategy;              // 自定义策略     1 - BC 2- BA 3 - ExtIO  	     
	quint16 usCustom5DINo;                  // 自定义DI序号
	quint16 usCustom5AlarmValue;            // 自定义告警值	

	quint16 usBaIOStrategy;                 // BA IO采集策略 0 - 不采集 1 - 采集
	quint16 usPosFuseStrategy;              // 正极熔断器策略   0 - 无熔丝 [1 - 每组BC(DI4)反馈 常开] [11 - 每组BC(DI4)反馈 常闭] 999 - 接BA DI3(常闭)  
	quint16 usNegFuseStrategy;              // 负极熔断器策略   0 - 无熔丝 [1 - 每组BC(DI5)反馈 常开] [11 - 每组BC(DI5)反馈 常闭] 999 - 接BA DI4(常闭)  	
	quint16 usBmuDIStrategy;                // BMU DI     0 - 正常   1 - 风机反馈
	quint16 usCellDataStrategy;             // 单体数据显示策略 0 - 全部显示 1 - 隐藏单体SOC/SOH
	quint16 usBMUUpgradeStrategy;           // BMU升级策略      0 - BC模式   1 - BC备份  
	  
//	quint16 usLastLinkageCtrl;              // 上次联动跳机控制
//	quint16 usLinkageTripState;             // 联动跳机模式状态   0 - 正常  1 - 触发联动跳机 2 - 联动跳机恢复(前提需要Ctrl状态为2)
//	quint16 usLinkageTripCtrl;              // 联动跳机模式控制   0 - 正常  1 - 联动跳机     2 - 不接受控制 由State = 1 转来  3 - 恢复接受控制 由State = 2 转来
		
	quint16 usTimeSrvIP1;                   // 对时服务IP1
	quint16 usTimeSrvIP2;                   // 对时服务IP2
	quint16 usTimeSrvIP3;                   // 对时服务IP3
	quint16 usTimeSrvIP4;                   // 对时服务IP4
	quint16 usTimeSrvPort;                  // 对时服务端口
	quint16 usCmdSrvIP1;                    // 命令服务IP1
	quint16 usCmdSrvIP2;                    // 命令服务IP2
	quint16 usCmdSrvIP3;                    // 命令服务IP3
	quint16 usCmdSrvIP4;                    // 命令服务IP4
	quint16 usCmdSrvPort;                   // 命令服务端口
	quint16 usDataSrvIP1;                   // 数据服务IP1
	quint16 usDataSrvIP2;                   // 数据服务IP2
	quint16 usDataSrvIP3;                   // 数据服务IP3
	quint16 usDataSrvIP4;                   // 数据服务IP4
	quint16 usDataSrvPort;                  // 数据服务端口

	quint16 usUDiskNotify;                  // U盘通知 0 - 无保存  1 - U盘保存  2 - U盘故障  3 - SD保存 4 - SD故障
	quint16 usUDiskCtrl;                    // U盘控制 1 - 拔出U盘
	quint16 usDataSavePeriod;               // 数据保存周期(秒)

	quint16 usInsuResTestBankIndex;         // 绝缘检测序号 + 100 等待绝缘检测结束	

	quint16 usDacSrvNum;                    // 采集服务采集组数
	quint16 usDacAssNum;                    // 采集辅助采集组数	
	quint16 usDacAssSyn;                    // 采集辅助时序同步 1 = 需要同步需等待(上电闭合)
	quint16 usForceMode;                    // 1 - 进入强制模式(强制闭合接触器,发PCS为正常)     0 - 正常模式
	quint16 usCalibMode;                    // 0 - 正常模式  1 - 进入标定模式  2 - 结束标定   
	quint16 usEmerMode;                     // 0 - 正常模式  1 - 进入应急模式  
	quint16 usDebugMode;                    // 0 - 正常模式  1 - 进入调试模式 
	quint16 usTranMode;                     // 0 - 正常模式  1 - 进入转发模式 
	quint16 usDlyBfCutCntorModifyCount;     // 断开接触器前延时时间修改计数 > 0 修改过,同步到ini = 0	

	quint16 usUpgradeMode;                  // BCMU、BMU升级模式 1 - BC升级  2 - BMU升级 +100 强制中断(通知xndacsrv进行初始化) 199 - 超时
	quint16 usUpgradeAddr;                  // 升级地址
	quint16 usUpgradeBCMUAddr;              // BCMU 地址(升级BMU时用)
	quint16 usUpgradeExeResult;             // 执行结果 0  - 正在执行 1 - 成功  2 - 失败  xndacsrv 赋值 +100 强制中断(xnview)
	quint16 usUpgradeExeErrCode;            // 执行错误码  

	quint16 usMstUpgradeMode;               // BA管家升级模式    1 -  BC升级  2 - BMU升级  +100 强制中断 (xnmstsrv写入)  11 -  以BC方式升级BMU
	quint16 usMstLastUpgradeMode;           // 上次值记录(xnview)
	quint16 usMstUpgradeBCMUAddr;           // BCMU 地址(xnmstsrv)
	quint16 usMstUpgradeExeResult;          // 执行结果     0  - 正在执行    1 - 成功     2 - 失败    3 - 超时   4 - 用户强制停止 (xnview 写入)

	quint16 usEMSContModifyCount;           // EMS 控制接触器计数
	quint16 usEMSConfModifyCount;           // EMS 控制汇流开关计数
	quint16 usEMSFaultClearModifyCount;     // EMS 故障清除计数
	quint16 usEMSNotifyUpgradeModifyCount;  // EMS 通知升级计数
	quint16 usStackTempParamModifyCount;    // 堆临时参数修改 计数

	float fStackTempParam[50];              // 临时参数 数据库加载

	// 保持寄存器
	quint16 usDelayBeforeCutCntor;           // 断开接触器前延时时间	 1
	quint16 usYear;                          // 年	                     2
	quint16 usMonth;                         // 月	                     3
	quint16 usDay;                           // 日	                     4
	quint16 usHour;                          // 时	                     5
	quint16 usMin;                           // 分	                     6
	quint16 usSec;                           // 秒	                     7
	quint16 usConfirmDt;                     // 设置日期确认	         8
	quint16 usEMSContCtrl;                   // 堆接触器管理	         9
	quint16 usEMSConfCtrl;                   // 汇流开关管理	         10
	quint16 usEMSFaultClear;                 // 故障清除	             11
	quint16 usFtpIP1;                        // FTP服务端IP1	         12
	quint16 usFtpIP2;                        // FTP服务端IP2	         13
	quint16 usFtpIP3;                        // FTP服务端IP3	         14
	quint16 usFtpIP4;                        // FTP服务端IP4	         15
	quint16 usEMSNotifyUpgrade;              // EMS通知升级              16
		
	quint16 usStackHoldTemp[50];             // 30 - 79  	

	// 告警
	SAlarm stackAlarm[10];                   // 电池堆告警	
};

// 电池组数据
// 一组电池组数据
class CBattBank
{
public:
	uchar uaModbusAddr;              // Modbus 地址
	uchar uaModbusAddrBg;            // Modbus 地址 对应转发的地址
                                   
	                                 // 输入寄存器
	quint16 usBankState;             // 电池组状态                     1      0x1111禁充 0x2222禁放 0x5555告警 0xAAAA故障 0xBBBB正常 
	quint16	usBankChgDchgState; 	 // 电池组充放电状态	           2      1 - 开路 2 - 待机 3 - 充电  4 - 放电
	quint16 usCellNumInBank;         // 电池组管辖电池节数             3
	quint16 usTempNumInBank;         // 电池组管辖温度节数             4
	quint16 usPackNumInBank;         // 电池组管辖PACK数               5
	quint16	usChgNum; 	             // 电池组充电次数		           6
	quint16	usDchgNum; 	             // 电池组放电次数		           7
	quint16	usSglMaxVolNo;           // 单体电压最大节号               8
	quint16	usSglMinVolNo;           // 单体电压最小节号               9
	quint16	usSglMaxTempNo;          // 单体温度最大节号               10
	quint16	usSglMinTempNo;          // 单体温度最小节号               11
	quint16	usSglMaxResNo;           // 单体内阻最大节号               12
	quint16	usSglMinResNo;           // 单体内阻最小节号               13
	quint16	usSglMaxSocNo;           // 单体SOC最大节号                14
	quint16	usSglMinSocNo;           // 单体SOC最小节号                15
	quint16	usSglMaxSohNo;           // 单体SOH最大节号                16
	quint16	usSglMinSohNo;           // 单体SOH最小节号                17	
	quint16	usDI1;				     // 开关量输入-DI1		           18     1--闭合， 0--断开
	quint16	usDI2; 	                 // 开关量输入-DI2                 19
	quint16	usDI3; 	                 // 开关量输入-DI3                 20
	quint16	usDI4; 	                 // 开关量输入-DI4		           21
	quint16	usDI5; 	                 // 开关量输入-DI5		           22	
	quint16	usDI6; 	                 // 开关量输入-DI6		           23	
	quint16 usBankTemp[29];          // 24 - 50(多2) 

	quint16	usModuleMaxVolNo;        // 模块电压最大节号               
	quint16	usModuleMinVolNo;        // 模块电压最小节号               
	
	float fBankVol; 	             // 组端电压		               51
	float fBankCur; 	             // 组电流		                   53
	float fBankPower;                // 组功率
	float fBankInsuRes;              // 组绝缘
	float fBankSoc;                  // 组SOC		                   55
	float fBankSoh;                  // 组SOH	                       57
	float fEnvTemp; 	             // 环境温度		               59
	float fPosRes; 	                 // 正极绝缘电阻	               61
	float fNegRes;                   // 负极绝缘电阻	               63
	float fBankChargeEQ; 	         // 电池组可充电量                 65 
	float fBankDischargeEQ; 	     // 电池组可放电量	               67
	float fBankSglChargeEQ;     	 // 电池组单次充电电量             69
	float fBankSglDischargeEQ; 	     // 电池组单次放电电量             71
	double dblBankChargeEQAdd; 	     // 电池组累计充电电量	           73
	double dblBankDischargeEQAdd;    // 电池组累计放电电量	           75
	float fBankSglChargeAh;     	 // 电池组单次充电容量             
	float fBankSglDischargeAh; 	     // 电池组单次放电容量             
	double dblBankChargeAhAdd; 	     // 电池组累计充电容量	           
	double dblBankDischargeAhAdd;    // 电池组累计放电容量	           
	float fSglVolDiffInBank;         // 组单体电压压差极差值           77
	float fSglAvgVol;                // 单体电压平均值                 79
	float fSglMaxVol;                // 单电电压最大值                 81	
	float fSglMinVol; 	             // 单电电压最小值	               83
	float fSglTempDiffInBank;        // 组单体温度温差极差值           85		
	float fSglAvgTemp; 	             // 单体温度平均值                 87
	float fSglMaxTemp;               // 单电温度最大值	               89	
	float fSglMinTemp;               // 单电温度最小值	               91	
	float fSglAvgRes;                // 单体平均内阻	               93
	float fSglMaxRes;                // 单体内阻最大值	               95	
	float fSglMinRes;                // 单体内阻最小值		           97
	float fSglAvgSoc; 	             // 单体SOC平均值                  99
	float fSglMaxSoc;                // 单体SOC最大值		           101
	float fSglMinSoc;                // 单体SOC最小值	               103	
	float fSglAvgSoh;                // 单体SOH平均值                  105
	float fSglMaxSoh;                // 单体SOH最大值	               107	
	float fSglMinSoh;                // 单体SOH最小值	               109	
	float fBankAllowMaxChargePower;       // 电池组最大充电功率             111 
	float fBankAllowMaxDischargePower;    // 电池组最大放电功率             113 
	float fBankAllowMaxChargeCurrent;     // 电池组最大充电电流             115 
	float fBankAllowMaxDischargeCurrent;  // 电池组最大放电电流             117 
	float fEnvTemp2; 	             // 环境温度		               119               
	float fEnvTemp3; 	             // 环境温度		               121
	float fEnvTemp4; 	             // 环境温度	                   123
	float fHvPwlTemp[4]; 	         // 高压极柱温度
	float fBankTemp[41];             // 125 - 200  

	float fModuleVolDiffInBank;     // 组模块电压极差值           
	float fModuleMaxVol;            // 模块电压最大值               
	float fModuleMinVol;            // 模块电压最小值 

		                             // 单体数据                           400Cell     600Cell
	float fSglVol[MAX_BATT_NUM];     // 单体电压                       201  ~ 1000   201  ~ 1400
	float fSglTemp[MAX_BATT_NUM];    // 单体温度                       1001 ~ 1800   1401 ~ 2600
	float fSglSoc[MAX_BATT_NUM];     // 单体Soc                        1801 ~ 2600   2601 ~ 3800
	float fSglRes[MAX_BATT_NUM];     // 单体内阻                       2601 ~ 3400   3801 ~ 5000
	float fSglSoh[MAX_BATT_NUM];     // 单体Soh                        3401 ~ 4200   5001 ~ 6200
	float fPwLnTemp[MAX_PACK_PWR_LN_TEMP_NUM]; // 动力线温度           4201 ~ 4400   6201 ~ 6400
	float fPackVol[MAX_PACK_NUM];    // 箱电压                         4401 ~ 4499 

		                                 // 支路信息
	quint16 usBranState;                 // 支路运行状态                        8001           0x1111禁充 0x2222禁放 0x5555告警 0xAAAA故障 0xBBBB正常         
	quint16 usMaxBankSocNoInBran;        // 支路内组SOC最高组号                 8002    
	quint16 usMinBankSocNoInBran;        // 支路内组SOC最低组号                 8003    
	quint16 usMaxBankVolNoInBran;        // 支路内组电压最高组号                8004   
	quint16 usMinBankVolNoInBran;        // 支路内组电压最低组号                8005   
	quint16 usSglMaxVolBankNoInBran;     // 支路内最高单体电压电池组号          8006   
	quint16 usSglMaxVolNoInBankInBran;   // 支路内最高单体电压所在组的组内编号  8007   
	quint16 usSglMinVolBankNoInBran;     // 支路内最低单体电压电池组号          8008   
	quint16 usSglMinVolNoInBankInBran;   // 支路内最低单体电压所在组的组内编号  8009   
	quint16 usSglMaxTempBankNoInBran;    // 支路内最高单体温度电池组号          8010   
	quint16 usSglMaxTempNoInBankInBran;  // 支路内最高单体温度所在组的组内编号  8011   
	quint16 usSglMinTempBankNoInBran;    // 支路内最低单体温度电池组号          8012   
	quint16 usSglMinTempNoInBankInBran;  // 支路内最低单体温度所在组的组内编号  8013   
	quint16 usBranTemp[40];              // 8014 - 8050  

	float fBranVol;                      // 支路电压                            8051  
	float fBranCur; 	                 // 支路电流                            8053
	float fBranPower;                    // 支路功率
	float fBranInsuRes;                  // 支路绝缘
	float fBranSoc;                      // 支路SOC                             8055
	float fBranSoh; 	                 // 支路SOH                             8057
	float fBranChargeEQ; 	             // 支路可充电量                        8059
	float fBranDischargeEQ;              // 支路可放电量                        8061
	float fBranSglChargeEQ;              // 支路单次充电电量                    8063
	float fBranSglDischargeEQ;           // 支路单次放电电量                    8065
	double dblBranChargeEQAdd;           // 支路充电量累加值                    8067
	double dblBranDischargeEQAdd; 	     // 支路放电量累加值                    8069
	float fBranSglChargeAh;              // 支路单次充电容量                
	float fBranSglDischargeAh;           // 支路单次放电容量                
	double dblBranChargeAhAdd;           // 支路充容量累加值                
	double dblBranDischargeAhAdd; 	     // 支路放容量累加值   
	float fSglVolDiffInBran;             // 单体电压压差极差值	                8071
	float fSglMaxVolInBran;              // 最高单体电压   		                8073
	float fSglMinVolInBran;              // 最低单体电压                        8075
	float fSglTempDiffInBran;            // 电池温度温差极差值	                8077
	float fSglMaxTempInBran;             // 最高电池温度                        8079
	float fSglMinTempInBran;             // 最低电池温度                        8081
	float fBankSocDiffInBran;            // 组SOC差极差值	                    8083
	float fBankSocMaxInBran;             // 组SOC最大                           8085
	float fBankSocMinInBran;             // 组SOC最小                           8087
	float fBankVolDiffInBran;            // 组电压差极差值	                    8089
	float fBankVolMaxInBran;             // 组电压最大                          8091
	float fBankVolMinInBran;             // 组电压最小                          8093
	float fBranAllowMaxChargePower;      // 支路当前允许最大充电功率            8095 
	float fBranAllowMaxDischargePower;   // 支路当前允许最大放电功率            8097 
	float fBranAllowMaxChargeCurrent;    // 支路当前允许最大充电电流            8099 
	float fBranAllowMaxDischargeCurrent; // 支路当前允许最大放电电流            8101 
	float fBranTemp[49];                 // 8103 - 8200  	
		
	                                 // 离散输入寄存器
	char aBankVolUpLimitWarn;	     // 组电压上限预警                 1
	char aBankVolDownLimitWarn;      // 组电压下限预警                 2
	char aChgCurUpLimitWarn;		 // 充电电流上限预警               3 
	char aDchgCurUpLimitWarn;		 // 放电电流上限预警               4
	char aSglVolUpLimitWarn;	     // 单体电压上限预警	           5
	char aSglVolDownLimitWarn;	     // 单体电压下限预警	           6	
	char aChgTempUpLimitWarn;	     // 充电温度上限预警	           7	
	char aChgTempDownLimitWarn;	     // 充电温度下限预警               8
	char aDchgTempUpLimitWarn;	     // 放电温度上限预警	           9	
	char aDchgTempDownLimitWarn;	 // 放电温度下限预警               10
	char aSglTempUpLimitWarn;	     // 单体温度上限预警	           11	
	char aSglTempDownLimitWarn;	     // 单体温度下限预警               12
	char aEnvTempUpLimitWarn;		 // 环境温度上限预警	           13
	char aEnvTempDownLimitWarn;	     // 环境温度下限预警	           14
	char aPowerLineTempUpLimitWarn;	 // 动力线温度上限预警	           15
	char aBankSocUpLimitWarn;	     // SOC超上限预警		           16
	char aBankSocDownLimitWarn;	     // SOC超下限预警		           17
	char aPosResDownLimitWarn;		 // 正极绝缘内阻下限预警           18
	char aNegResDownLimitWarn;		 // 负极绝缘内阻下限预警           19
	char aPackVolDiffUpLimitWarn;	 // 箱压差上限预警                 20
	char aPackTempDiffUpLimitWarn;	 // 箱温差上限预警                 21

	char aBankVolUpLimitAlarm;	     // 组电压上限告警                 22
	char aBankVolDownLimitAlarm;     // 组电压下限告警                 23
	char aChgCurUpLimitAlarm;		 // 充电电流上限告警               24 
	char aDchgCurUpLimitAlarm;		 // 放电电流上限告警               25
	char aSglVolUpLimitAlarm;	     // 单体电压上限告警	           26
	char aSglVolDownLimitAlarm;	     // 单体电压下限告警	           27	
	char aChgTempUpLimitAlarm;	     // 充电温度上限告警	           28	
	char aChgTempDownLimitAlarm;	 // 充电温度下限告警               29
	char aDchgTempUpLimitAlarm;	     // 放电温度上限告警	           30	
	char aDchgTempDownLimitAlarm;	 // 放电温度下限告警               31
	char aSglTempUpLimitAlarm;	     // 单体温度上限告警	           32	
	char aSglTempDownLimitAlarm;	 // 单体温度下限告警               33
	char aEnvTempUpLimitAlarm;		 // 环境温度上限告警	           34
	char aEnvTempDownLimitAlarm;	 // 环境温度下限告警	           35
	char aPowerLineTempUpLimitAlarm; // 动力线温度上限告警	           36
	char aBankSocUpLimitAlarm;	     // SOC超上限告警		           37
	char aBankSocDownLimitAlarm;	 // SOC超下限告警		           38
	char aPosResDownLimitAlarm;		 // 正极绝缘内阻下限告警           39
	char aNegResDownLimitAlarm;		 // 负极绝缘内阻下限告警           40
	char aPackVolDiffUpLimitAlarm;	 // 箱压差上限告警                 41
	char aPackTempDiffUpLimitAlarm;	 // 箱温差上限告警                 42

	char aBankVolUpLimitProt;	     // 组电压上限保护                 43
	char aBankVolDownLimitProt;      // 组电压下限保护                 44
	char aChgCurUpLimitProt;		 // 充电电流上限保护               45 
	char aDchgCurUpLimitProt;		 // 放电电流上限保护               46
	char aSglVolUpLimitProt;	     // 单体电压上限保护	           47
	char aSglVolDownLimitProt;	     // 单体电压下限保护	           48	
	char aChgTempUpLimitProt;	     // 充电温度上限保护	           49	
	char aChgTempDownLimitProt;	     // 充电温度下限保护               50
	char aDchgTempUpLimitProt;	     // 放电温度上限保护	           51	
	char aDchgTempDownLimitProt;	 // 放电温度下限保护               52
	char aSglTempUpLimitProt;	     // 单体温度上限保护	           53	
	char aSglTempDownLimitProt;	     // 单体温度下限保护               54
	char aEnvTempUpLimitProt;		 // 环境温度上限保护	           55
	char aEnvTempDownLimitProt;	     // 环境温度下限保护	           56
	char aPowerLineTempUpLimitProt;	 // 动力线温度上限保护	           57
	char aBankSocUpLimitProt;	     // SOC超上限保护		           58
	char aBankSocDownLimitProt;	     // SOC超下限保护		           59
	char aPosResDownLimitProt;		 // 正极绝缘内阻下限保护           60
	char aNegResDownLimitProt;		 // 负极绝缘内阻下限保护           61
	char aPackVolDiffUpLimitProt;	 // 箱压差上限保护                 62
	char aPackTempDiffUpLimitProt;	 // 箱温差上限保护                 63

	char aSglTempRise;	             // 电池温度温升过快               64
	char aPowerLineTempRise;	     // 动力线温度温升过快             65
	char aBMUConnFault;		         // BMU通讯故障	                   66
	char aBCMUConnFault;		     // BCMU通讯故障                   67	
	char aSglVolWireFault;           // 单体电压采集线故障             68
	char aBankVolWireFault;          // 总压采集线故障                 69
	char aCurWireFault;              // 电流采集线故障                 70
	char aTempWireBreak;             // 温度采集断线                   71
	char aTempShortCircuit;          // 温度采集短路                   72
	char aBMSFault;                  // BMS设备故障                    73
	char aSglVolInvalid;             // 单体电压无效                   74
	char aSglTempInvalid;            // 单体温度无效                   75
	char aBankVolInvalid;            // 组端电压无效                   76
	char aBankCurAbnormity;          // 组电流异常                     77    	
	char aPosJCQAdheFault;           // 总正接触器粘连故障             78
	char aNegJCQAdheFault;           // 总负接触器粘连故障             79
	char aPreJCQAdheFault;           // 预充接触器粘连故障             80
	char aPosJCQNotCloseFault;       // 总正接触器不闭合故障           81
	char aNegJCQNotCloseFault;       // 总负接触器不闭合故障           82
	char aPreJCQNotCloseFault;       // 预充接触器不闭合故障           83
	char aHallComFault;              // 霍尔通讯故障                   84
	char aHallDacFault;              // 霍尔采集故障                   85
	char aPosFuseBreakFault;         // 正极熔断器断开故障             86
	char aNegFuseBreakFault;         // 负极熔断器断开故障             87
	char aBankVolDiffFault;          // 组压采集差故障                 88
	char aPackVolUpLimitWarn;	     // 箱电压上限预警                 89
	char aPackVolDownLimitWarn;      // 箱电压下限预警                 90
	char aPackVolUpLimitAlarm;	     // 箱电压上限告警                 91
	char aPackVolDownLimitAlarm;     // 箱电压下限告警                 92
	char aPackVolUpLimitProt;	     // 箱电压上限保护                 93
	char aPackVolDownLimitProt;      // 箱电压下限保护                 94
	char aCellVolDiffUpLimitWarn;    // 组内单体电压极差上限预警       95
	char aCellVolDiffUpLimitAlarm;   // 组内单体电压极差上限告警       96
	char aCellVolDiffUpLimitProt;    // 组内单体电压极差上限保护       97
	char aCellTempDiffUpLimitWarn;   // 组内单体温度极差上限预警       98
	char aCellTempDiffUpLimitAlarm;  // 组内单体温度极差上限告警       99
	char aCellTempDiffUpLimitProt;   // 组内单体温度极差上限保护       100
	char aModuleVolDiffUpLimitWarn;  // 组内模块电压极差上限预警       101
	char aModuleVolDiffUpLimitAlarm; // 组内模块电压极差上限告警       102
	char aModuleVolDiffUpLimitProt;  // 组内模块电压极差上限保护       103
	char aHvPwLnTempUpLimitWarn;     // 高压动力线温度上限预警         104
	char aHvPwLnTempUpLimitAlarm;    // 高压动力线温度上限告警         105
	char aHvPwLnTempUpLimitProt;     // 高压动力线温度上限保护         106
	char aBankCurAbnormalWarn;       // 组电流异常预警                 107
	char aBankCurAbnormalAlarm;      // 组电流异常告警                 108
	char aBankCurAbnormalProt;       // 组电流异常保护                 109	
	char aCellVolSudChgWarn;         // 电压突变预警                   110
	char aCellVolSudChgAlarm;        // 电压突变告警                   111
	char aCellVolSudChgProt;         // 电压突变保护                   112
	char aCellInResAbnormal;         // 内阻异常报警                   113
	char aPrechgFailed;              // 预充异常报警                   114
	char aAlarmAvailable;            // 告警信息待获取                 115
	char aBankTemp[50];              // 预留50告警类型                 116 ~ 165	    

	char aChgEquState[MAX_BATT_NUM]; // 充电均衡状态                   201 ~ 800
	char aDchgEquState[MAX_BATT_NUM];// 放电均衡状态                   801 ~ 1400
			                 
	// 内部使用测点		
	uchar uaBCVersMajor1;            // BC主板本号高字节
	uchar uaBCVersMajor2;            // BC主板本号低字节
	uchar uaBCVersMinor1;            // BC次板本号高字节
	uchar uaBCVersMinor2;            // BC次板本号低字节
	uchar uaBCBootVers1;             // BC Boot版本号高字节
	uchar uaBCBootVers2;             // BC Boot版本号低字节
	uchar uaBMUVers1;                // BMU版本号高字节
	uchar uaBMUVers2;                // BMU版本号低字节
	
	quint16 usBankStateSum;          // 各组状态汇总   0 - 无  0x0001 - 充满  0x0002 - 放空  
	quint16 usIsolSwitchAggrState;   // 隔离开关汇总状态 0 - 断开  1 - 全部闭合
	quint16 usBranChgDropPowerYear;  // 支路充电降功率时间
	quint16 usBranChgDropPowerMonth;
	quint16 usBranChgDropPowerDay;
	quint16 usBranChgDropPowerHour;
	quint16 usBranChgDropPowerMin;
	quint16 usBranChgDropPowerSec;

	quint16 usBranDchgDropPowerYear; // 支路放电降功率时间
	quint16 usBranDchgDropPowerMonth;
	quint16 usBranDchgDropPowerDay;
	quint16 usBranDchgDropPowerHour;
	quint16 usBranDchgDropPowerMin;
	quint16 usBranDchgDropPowerSec;

	quint16 usBCRunMode;             // BC运行模式
	quint16 usBCConfig;              // BC配置项
	quint16 usInitState;             // 初始化状态(检查接触器粘连) 0 - 需要初始化  1 - 初始化完成  
	quint16 usForbidChg;             // 禁止充电
	quint16 usForbidDchg;            // 禁止放电
	quint16 usForbidReason;          // 降功率、禁充放原因 [X-充电降功率(1:电压 2:温度) X-禁充(1:电压 2:温度) X-放电降功率(1:电压 2:温度) X-禁放(1:电压 2:温度)]  0x0100 - 禁充(充满)  0x0200 - 禁充  0x0001 - 禁放(放空)  0x0002 - 禁放   
	double dblBankDchgEQAddInit;     // 禁充时的组累积放电量
	double dblBankChgEQAddInit;      // 禁放时的组累积放电量
	quint16 usBMUNum;                // BMU 数量
	float fFanStartTemp;             // 风机开启温度
	float fFanStopTemp;              // 风机停止温度
	SBMUParam BMUParam[MAX_BMU_NUM]; // BMU 参数配置
	quint16 usCellNumInPack;         // Pack中电池数
	quint16 usTempNumInPack;         // Pack中温度数
	quint16 usDiverter;              // 分流器型号
	quint16 usCanFrameNum;           // Can 帧数	

	quint16 usResTestState;          // 绝缘检测状态                    0 - 初始化  1 - 正在测试  2 - 测试结束	
	quint16 usInitFulfillNum;        // BC初始化完成次数	
	quint32 uiBCHeartbeat;           // BC心跳
	quint32 uiLastBCHeartbeat;       // 上次BC心跳
	
	quint16	usLastDI1;               // 上一次 BCMU开关状态寄存器Input 1（直流接触器状态）  1--闭合， 0--断开
	quint16	usLastDI2;  
	quint16	usLastDI3;  
	quint16	usLastDI4;  
	quint16	usLastDI5;  
	quint16	usLastDI6;  

	quint16 usStartYear;             // 开始充放电时间
	quint16 usStartMonth;
	quint16 usStartDay;
	quint16 usStartHour;
	quint16 usStartMin;
	quint16 usStartSec;
	quint16 usSaveYear;              // 数据保存时间
	quint16 usSaveMonth; 
	quint16 usSaveDay; 
	quint16 usSaveHour; 
	quint16 usSaveMin; 
	quint16 usSaveSec; 

	quint16 usStateChangeStartYear;                 // PCS状态 变化 开始时间(AAAA的状态变化记录)
	quint16 usStateChangeStartMonth; 
	quint16 usStateChangeStartDay; 
	quint16 usStateChangeStartHour; 
	quint16 usStateChangeStartMin; 
	quint16 usStateChangeStartSec; 
 
	quint16	usLastBankState;                        // 上一次PCS状态记录, PCS状态维持10秒才真正改变状态
	quint16 usLastBankStateYear;              
	quint16 usLastBankStateMonth; 
	quint16 usLastBankStateDay; 
	quint16 usLastBankStateHour; 
	quint16 usLastBankStateMin; 
	quint16 usLastBankStateSec; 
           
	quint16 usBCMUConnFaultStartYear;              // BC通讯故障开始时间, FaultStrategy=2 时5分钟后,PCS状态转化成 待机
	quint16 usBCMUConnFaultStartMonth; 
	quint16 usBCMUConnFaultStartDay; 
	quint16 usBCMUConnFaultStartHour; 
	quint16 usBCMUConnFaultStartMin; 
	quint16 usBCMUConnFaultStartSec; 

	quint16 usBMUConnFaultStartYear;              // BMU通讯故障开始时间, FaultStrategy=2 时5分钟后,PCS状态转化成 待机
	quint16 usBMUConnFaultStartMonth; 
	quint16 usBMUConnFaultStartDay; 
	quint16 usBMUConnFaultStartHour; 
	quint16 usBMUConnFaultStartMin; 
	quint16 usBMUConnFaultStartSec; 	

	quint16 usBMUConnFaultNo;                    // BMU通讯故障No

	// DO口(干湿节点) 
	quint16 usDry1State;         // 干接点1状态
	quint16 usDry2State;         // 干接点2状态
	quint16 usDry3State;         // 干接点3状态
	quint16 usDry4State;         // 干接点4状态
	quint16 usDry5State;         // 干接点5状态
	quint16 usDry6State;         // 干接点6状态
	quint16 usDry7State;         // 干接点7状态
	quint16 usWetState;          // 湿接点状态 - 接触器

	quint16 usDry1Ctrl;         // 干接点1控制	
	quint16 usDry2Ctrl;         // 干接点2控制
	quint16 usDry3Ctrl;         // 干接点3控制
	quint16 usDry4Ctrl;         // 干接点4控制
	quint16 usDry5Ctrl;         // 干接点5控制
	quint16 usDry6Ctrl;         // 干接点6控制
	quint16 usDry7Ctrl;         // 干接点7控制
	quint16 usWetCtrl;          // 湿接点控制 - 接触器

	int iDry1CtrlNum;           // 干接点1控制次数      // -1 一直发送 0 - 不控制
	int iDry2CtrlNum;           // 干接点2控制次数
	int iDry3CtrlNum;           // 干接点3控制次数
	int iDry4CtrlNum;           // 干接点4控制次数
	int iDry5CtrlNum;           // 干接点5控制次数
	int iDry6CtrlNum;           // 干接点6控制次数
	int iDry7CtrlNum;           // 干接点7控制次数
	int iWetCtrlNum;            // 湿接点控制次数

	int iPosJCQNotCloseCount;   // 总正接触器不闭合计数(故障)
	int iNegJCQNotCloseCount;   // 总负接触器不闭合计数(故障)
	int iPreJCQNotCloseCount;   // 预充接触器不闭合计数(故障)
	int iPosJCQCtrlCount;       // 总正接触器控制计数(粘连)
	int iNegJCQCtrlCount;       // 总负接触器控制计数(粘连)
	int iPreJCQCtrlCount;       // 预充接触器控制计数(粘连)
	int iPreJCQDelayCount;      // 预充接触器延时计数（闭合延时、预充延时）
	int iPrechgTimeoutCount;    // 预充超时计数

	// 需要闭合湿接点(接触器)
	quint16 usNeedCloseJCQ;     // 1 - 需要闭合  0 - 不需要闭合
	quint16 usPreChgCtrlState;  // 预充控制状态

	// 复位命令
	quint16 usResetSOC;         // 复位SOC 重新计算SOC  1 - 需要复位

	// 设置K值
	quint16 usSetKValue;             // 设置K值        1 - 需要设置  0 - 不需要
	quint16 usBankVolKValue;         // 组端电压K值
	quint16 usBankChargeCurKValue;   // 充电电流K值
	quint16 usBankDischargeCurKValue;// 放电电流K值  
	quint16 usBankVolKSet;           // 组端电压K设置值
	quint16 usBankChargeCurKSet;     // 充电电流K设置值
	quint16 usBankDischargeCurKSet;  // 放电电流K设置值  

	// 参数缓存(报警参数、报警回差、保护参数、保护回差)
	SAlarmParam param;	
	float fRatedVolTemp;                 // 平台电压缓存
	quint16 usDiverterTemp;              // 分流器型号缓存
	quint16 usBMUNumTemp;                // BMU 数量缓存
	SBMUParam BMUParamTemp[MAX_BMU_NUM]; // BMU 参数配置缓存

	// 通用命令缓存
	quint16 usCmdTpye;               // 返回类型 41 - 处理成功  42 - 处理失败
	                                 // 命令类型( > 200 ) 见通用命令类型 (200 ~ 150)   xnview   赋值
	quint16 usExeResult;             // 执行结果 0  - 正在执行 1 - 成功  2 - 失败    xndacsrv 赋值
	qint16 sCheckResultNum;          // 最多监测(执行)命令次数
	float fCmdParam1;                // 命令参数1
	float fCmdParam2;                // 命令参数2
	float fCmdParam3;                // 命令参数3
	float fCmdParam4;                // 命令参数4
	float fCmdParam5;                // 命令参数5
	float fCmdParam6;                // 命令参数6
	float fCmdParam7;                // 命令参数7
	float fCmdParam8;                // 命令参数8
	float fCmdParam9;                // 命令参数9
	float fCmdParam10;               // 命令参数10
	float fCmdParam11;               // 命令参数11
	float fCmdParam12;               // 命令参数12
	float fCmdParam13;               // 命令参数13
	float fCmdParam14;               // 命令参数14
	float fCmdParam15;               // 命令参数15

	// 手动复位标志
	quint16 usNeedManualReset;  // 需要手动复位    1 - 充电过流复位 0x01     2 - 放电过流复位 0x02   4 - 组端压差过大 0x04   8 - 保护告警 0x08   0x10 - 预充失败
                                //           
	// 存在支路内组压差		
	quint16 usConfirmYear;      // 确认时间时间
	quint16 usConfirmMonth;
	quint16 usConfirmDay;
	quint16 usConfirmHour;
	quint16 usConfirmMin;
	quint16 usConfirmSec;

	quint16 usBCMUConnFaultNum;    // BCMU 连接故障次数

	// 降功率 - 告警触发时间	
	quint16 usDropPowerType;                     // 上次降功率原因 0 - 无   1 - 超30mv   2 - 电压告警超  3 - 小电流维持告警  4 - 温度告警超
	quint16 usDropPowerAlarmYear;      
	quint16 usDropPowerAlarmMonth;
	quint16 usDropPowerAlarmDay;
	quint16 usDropPowerAlarmHour;
	quint16 usDropPowerAlarmMin;
	quint16 usDropPowerAlarmSec;
	float fLastBankAllowMaxChargePower;         // 电池组最大上次充电功率              
	float fLastBankAllowMaxDischargePower;      // 电池组最大上次放电功率              
	float fLastBankAllowMaxChargeCurrent;       // 电池组最大上次充电电流              
	float fLastBankAllowMaxDischargeCurrent;    // 电池组最大上次放电电流        

	// 监测数据调整步长(系数)
	float fBankVolCoe;                           // 组端电压调整步长(系数)
	float fChargeCurCoe;  				         // 充电电流调整步长(系数)
	float fDischargeCurCoe;  	                 // 放电电流调整步长(系数)
	float fEnvTempCoe;  	                     // 环境温度调整步长(系数)
	float fSglVolCoe;  	                         // 单体电压调整步长(系数)
	float fSglTempCoe;  	                     // 单体温度调整步长(系数)
	float fBankSocRefUpLmtCoe;  	             // SOC标定基准上限值调整步长(系数)
	float fBankSocRefDownLmtCoe;  	             // SOC标定基准下限值调整步长(系数)

	quint16 usWarnParamModifyCount;              // 预警参数修改计数 > 0 修改过,同步到DB = 0
	quint16 usAlarmParamModifyCount;             // 告警参数修改计数
	quint16 usProtParamModifyCount;              // 保护参数修改计数
	quint16 usWarnHCParamModifyCount;            // 预警参数修改计数 > 0 修改过,同步到DB = 0
	quint16 usAlarmHCParamModifyCount;           // 告警参数修改计数
	quint16 usProtHCParamModifyCount;            // 保护参数修改计数
	quint16 usBankTempParamModifyCount;          // 组临时参数修改计数
	quint16 usMonitorParamModifyCount;           // 监测数据调整步长修改计数
	quint16 usEMSContModifyCountPos;             // EMS 控制接触器
	quint16 usEMSContModifyCountNeg;             // EMS 控制接触器

	// SOH 
	quint16 usSglVolSnapState;                   // 单体电压快照状态 0 - 上限下限都可记录  0x0001 - 已记录上限  0x0010 - 已记录下限 
	float fSglVolUpSnap[MAX_BATT_NUM];           // 单体电压上限快照      
	float fSglVolDownSnap[MAX_BATT_NUM];         // 单体电压下限快照

	// 单体温度数据处理
	quint16 usDtProcTempWireBreak;               // 温度采集断线           
	quint16 usDtProcTempShortCircuit;            // 温度采集短路    
	float fDtProcSglTemp[MAX_BATT_NUM];          // 单体温度 

	// 单体电压数据处理
	float fDtProcSglVol[MAX_BATT_NUM];           // 单体电压
	quint16 usDtProcSglVolState[MAX_BATT_NUM];   // 单体电压状态   1 - 过压预警或告警  2 - 欠压预警或告警  11 - 过压保护  22 - 欠压保护      

	// 温升处理
	quint16 usTempRiseConut[MAX_BATT_NUM];       // 温升时间计数
	float fTempRise[MAX_BATT_NUM];

	// 电压突变处理 检测到单体电压与平均电压突升后,延时5秒确认，比较
	quint16 usVolSudChgConut[MAX_BATT_NUM];       // 电压突变计数
	quint16 usVolDeltaIndex;                      // 5次缓存序号
	float fInitSglVolSudChg[MAX_BATT_NUM];
	float fSglVolTemp[MAX_BATT_NUM];              // 单体电压	
	float fVolDelta[5][MAX_BATT_NUM];
	float fAvgVolTemp;                            // 平均电压
	float fAvgVolDelta[5];	

	// 内阻异常检测
	quint16 usResAbnormalState[MAX_BATT_NUM];    // 过压 - 0x01xx  欠压 - 0xxx01 重启失效

	// 充放电电量统计
	float fChgEQForNum;                          // 充电次数的电量统计
	float fDchgEQForNum;                         // 放电次数的电量统计
	quint16 usThisChgFulfill;                    // 本次充电次数统计完成
	quint16 usThisDchgFulfill;                   // 本次放电次数统计完成

	quint16 usEMSContCtrlPos;                    // EMS接触控制  0 - BMS控制 1 - 闭合 2 - 断开 
	quint16 usEMSContCtrlNeg;                    // EMS接触控制  0 - BMS控制 1 - 闭合 2 - 断开
	quint16 usBankHoldTemp[50];                  // 129 - 178  	 

	// 标定容量计算
	float fDchgCap;
	float fChgCap;

	// BMU风机控制
	float fBMUFanStartTemp;                      // BMU中风机启动温度
	float fBMUFanStopTemp;                       // BMU中风机停止温度
	char aFanState[MAX_BMU_NUM];	             // 风机状态           0 - 未启动   1 - 启动
	char aBMUDI[MAX_BMU_NUM];	                 // BMU DI状态         0 - 断开     1 - 闭合
	char aFanFault[MAX_BMU_NUM];	             // 风机故障

	// 过流告警、保护标识
	quint16 usOverCurAlarm;                      // 过流告警标识  0 - 无   1 - 充电    2 - 放电
	quint16 usOverCurProt;                       // 过流保护标识  0 - 无   1 - 充电    2 - 放电

	// 保护需要人为确认
	quint16 usNeedManualResetForProt; 

	// BC动作记录
	quint16 usActCount;                          // BC动作计数  
	quint16 usActRsn;                            // BC动作原因    0 - 未知 1 - 过压 2 - 欠压 3 - 过温 4 - 过流 5 - 通讯故障 
	quint16 usLastActCount;                      // BC上次动作计数
	quint16 usActAlarm;                          // BC动作告警
	quint16 usActDelayCount;                     // BC动作时间    约60s后恢复

	// BC 对时
	quint16 usLastTimeSynHour;                   // 上次对时时数
	quint16 usTimeSynCount;                      // 时间同步计数
	quint32 uiSendTimeSecs;                      // 发送对时秒数
	quint16 usSendTimeMsecs;                     // 发送对时毫秒数
	quint32 uiReceTimeSecs;                      // 接受对时秒数
	quint16 usReceTimeMsecs;                     // 接受对时毫秒数
};

class CBAComReg
{
public:
	quint16 usComInputRegVal[100];           // BA 通用输入寄存器      
	quint16 usComHoldRegVal[50];             // BA 通用保持寄存器
};

// 报警
class CBankAlarm
{
public:
	quint16 usWarnNum;                         // 预警数
	quint16 usAlarmNum;                        // 告警数
	quint16 usProtNum;                         // 保护数	

	quint8 uaTotalAlarmState;                  // 总报警状态
	quint8 uaWarnState;                        // 预警状态
	quint8 uaAlarmState;                       // 告警状态
	quint8 uaProtState;                        // 保护状态

	quint16 usFirstAlarmNo;                    // 第一条报警序号
	SAlarmParam param;                         // 报警保护参数
	SAlarm bankAlarm[BANK_ALARM_MAX_NUM];	

	quint8 uaBankVolAlarmType;                     // 组端电压报警类型
	quint8 uaBankCurAlarmType;                     // 组电流报警类型
	quint8 uaBankSocAlarmType;                     // 组SOC报警类型
	quint8 uaEnvTempAlarmType;                     // 环境温度报警类型
	quint8 uaPosResAlarmType;                      // 正极绝缘内阻报警类型
	quint8 uaNegResAlarmType;                      // 负极绝缘内阻报警类型
	quint8 uaBankVolDiffAlarmType;                 // 组压采集差报警类型	

	quint8 uaBMUConnFault;                         // BMU通讯故障
	quint8 uaBCMUConnFault;                        // BCMU通讯故障
	quint8 uaSglVolWireFault;                      // 单体电压采集线故障
	quint8 uaBankVolWireFault;                     // 总压采集线故障
	quint8 uaCurWireFault;                         // 电流采集线故障
	quint8 uaTempWireBreak;                        // 温度采集断线
	quint8 uaTempShortCircuit;                     // 温度采集短路  
	quint8 uaBankCurAbnormity;                     // 组电流异常 
	quint8 uaSglSocDiffAlarmType;                  // 单体Soc差告警类型   上海电气
	quint8 uaRes1AlarmType;                        // 预留1告警类型
	quint8 uaRes2AlarmType;                        // 预留2告警类型
	quint8 uaPosFuseAlarm;                         // 正极熔断器熔断
	quint8 uaNegFuseAlarm;                         // 负极熔断器熔断
	quint8 uaFireAlarm;                            // 消防报警 
	quint8 uaWaterAlarm;                           // 水浸报警 
	quint8 uaEmerStop;                             // 紧急停机
	quint8 uaExIOModuConnFault;                    // 扩展IO设备通讯故障
	quint8 uaPosJCQAdheFault;                      // 总正接触器粘连故障
	quint8 uaNegJCQAdheFault;                      // 总负接触器粘连故障
	quint8 uaPreJCQAdheFault;                      // 预充接触器粘连故障
	quint8 uaPosJCQNotCloseFault;                  // 总正接触器不闭合故障
	quint8 uaNegJCQNotCloseFault;                  // 总负接触器不闭合故障
	quint8 uaPreJCQNotCloseFault;                  // 预充接触器不闭合故障
	quint8 uaHallComFault;                         // 霍尔通讯故障
	quint8 uaHallDacFault;                         // 霍尔采集故障
	quint8 uaBankVolDiffFault;                     // 组压差采集故障
	quint8 uaBankCellVolDiffAlarmType;             // 组内单体电压极差报警类型
	quint8 uaBankCellTempDiffAlarmType;            // 组内单体温度极差上限保护
	quint8 uaBankModuleVolDiffAlarmType;           // 组内模块电压极差上限保护
	quint8 uaBankHvPwLnTempAlarmType[4];           // 高压动力线温度上限保护
	quint8 uaBankCurDiffAlarmType;                 // 组间环流报警类型
	quint8 uaBankCurDiffAlarmTypeTemp;             // 组间环流报警类型临时
	quint8 uaBankCurDiffAlarmCount;                // 组间环流报警计数
	quint8 uaPreChgAbnormalAlarmType;              // 预充异常报警
	
	quint8 uaSglVolAlarmType[MAX_BATT_NUM];        // 单体电压报警类型
	quint8 uaSglVolSudChgAlarmType[MAX_BATT_NUM];  // 单体电压突变报警类型
	quint8 uaSglResAlarmType[MAX_BATT_NUM];        // 单体内阻异常报警类型
	quint8 uaChgSglTempAlarmType[MAX_BATT_NUM];    // 充电温度报警类型
	quint8 uaDchgSglTempAlarmType[MAX_BATT_NUM];   // 放电温度报警类型
	quint8 uaSglTempRiseAlarmType[MAX_BATT_NUM];   // 温度温升报警类型
	quint8 uaPackVolDiffAlarmType[MAX_PACK_NUM];   // 箱压差报警类型 
	quint8 uaPackTempDiffAlarmType[MAX_PACK_NUM];  // 箱温差报警类型
	quint8 uaPackVolAlarmType[MAX_PACK_NUM];       // 箱电压报警类型
	quint8 uaPwLnTempAlarmType[MAX_PACK_PWR_LN_TEMP_NUM];  // 动力线报警类型(包含总正总负)
	quint8 uaSglSocAlarmType[MAX_BATT_NUM];                // 单体SOC告警类型
	quint8 uaSglSohAlarmType[MAX_BATT_NUM];                // 单体SOH告警类型     上海电气	

	quint16 usBMUConnFaultIndex;                   // BMU通讯故障Index

	// 告警缓存
	quint16 usFirstCacheNo;                        // 第一条告警缓存序号 xntransrv 直接取 第一条告警缓存
	quint16 usLastCacheNo;                         // 最后条告警缓存序号 xnprocsrv 直接放 指向下条空缓存
	SAlarmCache alarmCache[MAX_ALARM_CACHE_NUM];	
};
#endif // COM_STRUCT_H
